Go to the documentation of this file.
41 #ifndef __MEM_RUBY_SLICC_INTERFACE_ABSTRACTCONTROLLER_HH__
42 #define __MEM_RUBY_SLICC_INTERFACE_ABSTRACTCONTROLLER_HH__
58 #include "mem/ruby/protocol/AccessPermission.hh"
60 #include "params/RubyController.hh"
70 virtual const char*
what()
const throw()
71 {
return "Port rejected message based on type"; }
98 virtual void print(std::ostream & out)
const = 0;
128 {
fatal(
"Prefetches not implemented!");}
134 {
fatal(
"collateStats() should be overridden!");}
258 #endif // __MEM_RUBY_SLICC_INTERFACE_ABSTRACTCONTROLLER_HH__
#define fatal(...)
This implements a cprintf based fatal() function.
void blockOnQueue(Addr, MessageBuffer *)
virtual void print(std::ostream &out) const =0
NodeID getVersion() const
WaitingBufType m_waiting_buffers
virtual int functionalWriteBuffers(PacketPtr &)=0
The return value indicates the number of messages written with the data from the packet.
const Cycles m_mandatory_queue_latency
void profileRequest(const std::string &request)
Profiles original cache requests including PUTs.
Tick recvAtomic(PacketPtr pkt)
AbstractController * controller
std::vector< Stats::Histogram * > m_delayVCHistogram
const PortID InvalidPortID
MachineType getType() const
virtual MessageBuffer * getMemReqQueue() const =0
virtual MessageBuffer * getMandatoryQueue() const =0
void initNetworkPtr(Network *net_ptr)
void stallBuffer(MessageBuffer *buf, Addr addr)
bool recvTimingResp(PacketPtr pkt)
Receive a timing response from the peer.
virtual AccessPermission getAccessPermission(const Addr &addr)=0
uint64_t Tick
Tick count type.
MachineID mapAddressToMachine(Addr addr, MachineType mtype) const
Map an address to the correct MachineID.
MemoryPort(const std::string &_name, AbstractController *_controller, PortID id=InvalidPortID)
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
const AddrRangeList & getAddrRanges() const
const AddrRangeList addrRanges
The address range to which the controller responds on the CPU side.
unsigned int m_cur_in_port
bool serviceMemoryQueue()
bool isBlocked(Addr) const
The ClockedObject class extends the SimObject with a clock and accessor functions to relate ticks to ...
virtual bool functionalReadBuffers(PacketPtr &)=0
These functions are used by ruby system to read/write the data blocks that exist with in the controll...
This is a simple scalar statistic, like a counter.
const Params * params() const
void wakeUpBuffers(Addr addr)
virtual void regStats()
Callback to set stat parameters.
A virtual base opaque structure used to hold state associated with the packet (e.g....
const int m_transitions_per_cycle
virtual const char * what() const
Ports are used to interface objects to each other.
virtual void functionalRead(const Addr &addr, PacketPtr)=0
Stats::Histogram & getDelayVCHist(uint32_t index)
int functionalMemoryWrite(PacketPtr)
void recvTimingResp(PacketPtr pkt)
std::map< Addr, MsgVecType * > WaitingBufType
std::map< Addr, MessageBuffer * > m_block_map
Port that forwards requests and receives responses from the memory controller.
A RequestPort is a specialisation of a Port, which implements the default protocol for the three diff...
Stats::Histogram m_delayHistogram
Histogram for profiling delay for the messages this controller cares for.
virtual void collateStats()
Function for collating statistics from all the controllers of this particular type.
virtual void recordCacheTrace(int cntrl, CacheRecorder *tr)=0
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Stats::Scalar m_fully_busy_cycles
Counter for the number of cycles when the transitions carried out were equal to the maximum allowed.
const unsigned int m_buffer_size
Stats::Histogram & getDelayHist()
virtual int functionalWrite(const Addr &addr, PacketPtr)=0
void init()
init() is called after all C++ SimObjects have been created and all ports are connected.
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID)
A function used to return the port associated with this bus object.
const SimObjectParams * _params
Cached copy of the object parameters.
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
MachineType getType() const
void recvReqRetry()
Called by the peer if sendTimingReq was called on this peer (causing recvTimingReq to be called on th...
RubyControllerParams Params
Cycles is a wrapper class for representing cycle counts, i.e.
std::set< MessageBuffer * > MsgBufType
virtual void enqueuePrefetch(const Addr &, const RubyRequestType &)
Function for enqueuing a prefetch request.
void profileMsgDelay(uint32_t virtualNetwork, Cycles delay)
Profiles the delay associated with messages.
SenderState(MachineID _id)
virtual Cycles mandatoryQueueLatency(const RubyRequestType ¶m_type)
virtual Sequencer * getCPUSequencer() const =0
RequestorID getRequestorId() const
const int m_number_of_TBEs
virtual MessageBuffer * getMemRespQueue() const =0
virtual void initNetQueues()=0
Initialize the message buffers.
std::vector< MessageBuffer * > MsgVecType
MachineID getMachineID() const
virtual GPUCoalescer * getGPUCoalescer() const =0
virtual DMASequencer * getDMASequencer() const =0
AbstractController(const Params *p)
virtual void resetStats()=0
Callback to reset stats.
void functionalMemoryRead(PacketPtr)
Generated on Wed Sep 30 2020 14:02:13 for gem5 by doxygen 1.8.17