gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
AbstractController.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017,2019-2022 ARM Limited
3  * All rights reserved.
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Copyright (c) 2009-2014 Mark D. Hill and David A. Wood
15  * All rights reserved.
16  *
17  * Redistribution and use in source and binary forms, with or without
18  * modification, are permitted provided that the following conditions are
19  * met: redistributions of source code must retain the above copyright
20  * notice, this list of conditions and the following disclaimer;
21  * redistributions in binary form must reproduce the above copyright
22  * notice, this list of conditions and the following disclaimer in the
23  * documentation and/or other materials provided with the distribution;
24  * neither the name of the copyright holders nor the names of its
25  * contributors may be used to endorse or promote products derived from
26  * this software without specific prior written permission.
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
31  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
32  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
33  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
34  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
36  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39  */
40 
41 #ifndef __MEM_RUBY_SLICC_INTERFACE_ABSTRACTCONTROLLER_HH__
42 #define __MEM_RUBY_SLICC_INTERFACE_ABSTRACTCONTROLLER_HH__
43 
44 #include <exception>
45 #include <iostream>
46 #include <string>
47 #include <unordered_map>
48 
49 #include "base/addr_range.hh"
50 #include "base/addr_range_map.hh"
51 #include "base/callback.hh"
52 #include "mem/packet.hh"
53 #include "mem/qport.hh"
60 #include "mem/ruby/protocol/AccessPermission.hh"
62 #include "params/RubyController.hh"
63 #include "sim/clocked_object.hh"
64 #include "sim/eventq.hh"
65 
66 namespace gem5
67 {
68 
69 namespace ruby
70 {
71 
72 class Network;
73 class GPUCoalescer;
74 class DMASequencer;
75 
76 // used to communicate that an in_port peeked the wrong message type
77 class RejectException: public std::exception
78 {
79  virtual const char* what() const throw()
80  { return "Port rejected message based on type"; }
81 };
82 
84 {
85  public:
86  PARAMS(RubyController);
87  AbstractController(const Params &p);
88  void init();
89 
90  NodeID getVersion() const { return m_machineID.getNum(); }
91  MachineType getType() const { return m_machineID.getType(); }
92 
93  void initNetworkPtr(Network* net_ptr) { m_net_ptr = net_ptr; }
94 
95  // return instance name
97  bool isBlocked(Addr) const;
98  void unblock(Addr);
99  bool isBlocked(Addr);
100 
101  virtual MessageBuffer* getMandatoryQueue() const = 0;
102  virtual MessageBuffer* getMemReqQueue() const = 0;
103  virtual MessageBuffer* getMemRespQueue() const = 0;
104 
105  // That function must be called by controller when dequeuing mem resp queue
106  // for memory controller to receive the retry request in time
107  void memRespQueueDequeued();
108  // Or that function can be called to perform both dequeue and notification
109  // at once.
110  void dequeueMemRespQueue();
111 
112  virtual AccessPermission getAccessPermission(const Addr &addr) = 0;
113 
114  virtual void print(std::ostream & out) const = 0;
115  virtual void wakeup() = 0;
116  virtual void resetStats() = 0;
117  virtual void regStats();
118 
119  virtual void recordCacheTrace(int cntrl, CacheRecorder* tr) = 0;
120  virtual Sequencer* getCPUSequencer() const = 0;
121  virtual DMASequencer* getDMASequencer() const = 0;
122  virtual GPUCoalescer* getGPUCoalescer() const = 0;
123 
124  // This latency is used by the sequencer when enqueueing requests.
125  // Different latencies may be used depending on the request type.
126  // This is the hit latency unless the top-level cache controller
127  // introduces additional cycles in the response path.
128  virtual Cycles mandatoryQueueLatency(const RubyRequestType& param_type)
129  { return m_mandatory_queue_latency; }
130 
133  virtual bool functionalReadBuffers(PacketPtr&) = 0;
134  virtual void functionalRead(const Addr &addr, PacketPtr)
135  { panic("functionalRead(Addr,PacketPtr) not implemented"); }
136 
139  virtual bool functionalReadBuffers(PacketPtr&, WriteMask &mask) = 0;
140  virtual void functionalRead(const Addr &addr, PacketPtr pkt,
141  WriteMask &mask)
142  { panic("functionalRead(Addr,PacketPtr,WriteMask) not implemented"); }
143 
147  virtual int functionalWriteBuffers(PacketPtr&) = 0;
148  virtual int functionalWrite(const Addr &addr, PacketPtr) = 0;
150 
152  virtual void enqueuePrefetch(const Addr &, const RubyRequestType&)
153  { fatal("Prefetches not implemented!");}
154 
157  virtual void notifyCoalesced(const Addr& addr,
158  const RubyRequestType& type,
159  const RequestPtr& req,
160  const DataBlock& data_blk,
161  const bool& was_miss)
162  { }
163 
167  virtual void collateStats()
168  {fatal("collateStats() should be overridden!");}
169 
171  virtual void initNetQueues() = 0;
172 
174  Port &getPort(const std::string &if_name,
175  PortID idx=InvalidPortID);
176 
177  bool recvTimingResp(PacketPtr pkt);
179 
180  const AddrRangeList &getAddrRanges() const { return addrRanges; }
181 
182  public:
183  MachineID getMachineID() const { return m_machineID; }
184  RequestorID getRequestorId() const { return m_id; }
185 
188  { return *(stats.delayVCHistogram[index]); }
189 
191  {
192  for (auto &range: addrRanges)
193  if (range.contains(addr)) return true;
194  return false;
195  }
196 
210  MachineID mapAddressToMachine(Addr addr, MachineType mtype) const;
211 
224  MachineType mtype = MachineType_NUM) const;
225 
228 
230  const NetDest& allUpstreamDest() const { return upstreamDestinations; }
231 
232  protected:
234  void profileRequest(const std::string &request);
236  void profileMsgDelay(uint32_t virtualNetwork, Cycles delay);
237 
238  // Tracks outstanding transactions for latency profiling
239  struct TransMapPair { unsigned transaction; unsigned state; Tick time; };
240  std::unordered_map<Addr, TransMapPair> m_inTransAddressed;
241  std::unordered_map<Addr, TransMapPair> m_outTransAddressed;
242 
243  std::unordered_map<Addr, TransMapPair> m_inTransUnaddressed;
244  std::unordered_map<Addr, TransMapPair> m_outTransUnaddressed;
245 
260  template<typename EventType, typename StateType>
262  EventType type, StateType initialState, bool retried,
263  bool isAddressed=true)
264  {
265  auto& m_inTrans =
267  assert(m_inTrans.find(addr) == m_inTrans.end());
268  m_inTrans[addr] = {type, initialState, curTick()};
269  if (retried)
271  }
272 
283  template<typename StateType>
284  void incomingTransactionEnd(Addr addr, StateType finalState,
285  bool isAddressed=true)
286  {
287  auto& m_inTrans =
289  auto iter = m_inTrans.find(addr);
290  assert(iter != m_inTrans.end());
291  stats.inTransLatHist[iter->second.transaction]
292  [iter->second.state]
293  [(unsigned)finalState]->sample(
294  ticksToCycles(curTick() - iter->second.time));
295  ++(*stats.inTransLatTotal[iter->second.transaction]);
296  m_inTrans.erase(iter);
297  }
298 
310  template<typename EventType>
312  bool isAddressed=true)
313  {
314  auto& m_outTrans =
316  assert(m_outTrans.find(addr) == m_outTrans.end());
317  m_outTrans[addr] = {type, 0, curTick()};
318  }
319 
330  void outgoingTransactionEnd(Addr addr, bool retried,
331  bool isAddressed=true)
332  {
333  auto& m_outTrans =
335  auto iter = m_outTrans.find(addr);
336  assert(iter != m_outTrans.end());
337  stats.outTransLatHist[iter->second.transaction]->sample(
338  ticksToCycles(curTick() - iter->second.time));
339  if (retried)
340  ++(*stats.outTransLatHistRetries[iter->second.transaction]);
341  m_outTrans.erase(iter);
342  }
343 
344  void stallBuffer(MessageBuffer* buf, Addr addr);
345  void wakeUpBuffer(MessageBuffer* buf, Addr addr);
346  void wakeUpBuffers(Addr addr);
347  void wakeUpAllBuffers(Addr addr);
348  void wakeUpAllBuffers();
349  bool serviceMemoryQueue();
350 
351  protected:
355 
356  // RequestorID used by some components of gem5.
358 
361  std::map<Addr, MessageBuffer*> m_block_map;
362 
364  typedef std::set<MessageBuffer*> MsgBufType;
365  typedef std::map<Addr, MsgVecType* > WaitingBufType;
367 
368  unsigned int m_in_ports;
369  unsigned int m_cur_in_port;
370  const int m_number_of_TBEs;
372  const unsigned int m_buffer_size;
377 
382  class MemoryPort : public RequestPort
383  {
384  private:
385  // Controller that operates this port.
387 
388  public:
389  MemoryPort(const std::string &_name, AbstractController *_controller,
390  PortID id = InvalidPortID);
391 
392  protected:
393  // Function for receiving a timing response from the peer port.
394  // Currently the pkt is handed to the coherence controller
395  // associated with this port.
396  bool recvTimingResp(PacketPtr pkt);
397 
398  void recvReqRetry();
399  };
400 
401  /* Request port to the memory controller. */
403 
404  // State that is stored in packets sent to the memory controller.
406  {
407  // Id of the machine from which the request originated.
409 
411  {}
412  };
413 
414  private:
417 
418  std::unordered_map<MachineType, AddrRangeMap<MachineID, 3>>
420 
423 
424  void sendRetryRespToMem();
426 
427  public:
429  {
431 
432  // Initialized by the SLICC compiler for all combinations of event and
433  // states. Only histograms with samples will appear in the stats
438 
439  // Initialized by the SLICC compiler for all events.
440  // Only histograms with samples will appear in the stats.
443 
447 
452  } stats;
453 
454 };
455 
456 } // namespace ruby
457 } // namespace gem5
458 
459 #endif // __MEM_RUBY_SLICC_INTERFACE_ABSTRACTCONTROLLER_HH__
gem5::statistics::Scalar
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:1929
MachineID.hh
gem5::curTick
Tick curTick()
The universal simulation clock.
Definition: cur_tick.hh:46
fatal
#define fatal(...)
This implements a cprintf based fatal() function.
Definition: logging.hh:200
gem5::ruby::MachineID::getType
MachineType getType() const
Definition: MachineID.hh:66
gem5::PortID
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
Definition: types.hh:245
gem5::ruby::AbstractController::MsgBufType
std::set< MessageBuffer * > MsgBufType
Definition: AbstractController.hh:364
gem5::ruby::AbstractController::getVersion
NodeID getVersion() const
Definition: AbstractController.hh:90
gem5::ruby::Sequencer
Definition: Sequencer.hh:86
gem5::ruby::AbstractController::outgoingTransactionEnd
void outgoingTransactionEnd(Addr addr, bool retried, bool isAddressed=true)
Profiles the end of an outgoing transaction.
Definition: AbstractController.hh:330
gem5::ruby::WriteMask
Definition: WriteMask.hh:59
gem5::ruby::AbstractController::ControllerStats::fullyBusyCycles
statistics::Scalar fullyBusyCycles
Counter for the number of cycles when the transitions carried out were equal to the maximum allowed.
Definition: AbstractController.hh:446
gem5::ruby::AbstractController::ControllerStats::outTransLatHist
std::vector< statistics::Histogram * > outTransLatHist
Definition: AbstractController.hh:441
gem5::ruby::AbstractController::m_number_of_TBEs
const int m_number_of_TBEs
Definition: AbstractController.hh:370
gem5::ruby::AbstractController::getMemReqQueue
virtual MessageBuffer * getMemReqQueue() const =0
Histogram.hh
gem5::ruby::AbstractController::recordCacheTrace
virtual void recordCacheTrace(int cntrl, CacheRecorder *tr)=0
gem5::ruby::AbstractController::profileMsgDelay
void profileMsgDelay(uint32_t virtualNetwork, Cycles delay)
Profiles the delay associated with messages.
Definition: AbstractController.cc:137
gem5::MipsISA::index
Bitfield< 30, 0 > index
Definition: pra_constants.hh:47
gem5::ruby::AbstractController::getType
MachineType getType() const
Definition: AbstractController.hh:91
gem5::ruby::AbstractController::getMachineID
MachineID getMachineID() const
Definition: AbstractController.hh:183
gem5::ruby::AbstractController::profileRequest
void profileRequest(const std::string &request)
Profiles original cache requests including PUTs.
gem5::ruby::AbstractController::SenderState::SenderState
SenderState(MachineID _id)
Definition: AbstractController.hh:410
gem5::ruby::AbstractController::TransMapPair::state
unsigned state
Definition: AbstractController.hh:239
gem5::ruby::AbstractController::ControllerStats::inTransLatHist
std::vector< std::vector< std::vector< statistics::Histogram * > > > inTransLatHist
Definition: AbstractController.hh:435
gem5::ruby::AbstractController::getGPUCoalescer
virtual GPUCoalescer * getGPUCoalescer() const =0
gem5::ruby::AbstractController::serviceMemoryQueue
bool serviceMemoryQueue()
Definition: AbstractController.cc:261
gem5::ruby::Network
Definition: Network.hh:82
gem5::ruby::AbstractController::WaitingBufType
std::map< Addr, MsgVecType * > WaitingBufType
Definition: AbstractController.hh:365
gem5::ruby::AbstractController::getDelayHist
statistics::Histogram & getDelayHist()
Definition: AbstractController.hh:186
gem5::ruby::AbstractController::wakeUpBuffers
void wakeUpBuffers(Addr addr)
Definition: AbstractController.cc:181
gem5::ruby::AbstractController::resetStats
virtual void resetStats()=0
Callback to reset stats.
Definition: AbstractController.cc:121
gem5::ruby::AbstractController::MemoryPort
Port that forwards requests and receives responses from the memory controller.
Definition: AbstractController.hh:382
gem5::ruby::AbstractController::m_recycle_latency
Cycles m_recycle_latency
Definition: AbstractController.hh:373
gem5::ruby::AbstractController::mapAddressToDownstreamMachine
MachineID mapAddressToDownstreamMachine(Addr addr, MachineType mtype=MachineType_NUM) const
Maps an address to the correct dowstream MachineID (i.e.
Definition: AbstractController.cc:426
gem5::ruby::AbstractController::dequeueMemRespQueue
void dequeueMemRespQueue()
Definition: AbstractController.cc:458
std::vector
STL vector class.
Definition: stl.hh:37
gem5::ruby::AbstractController::m_block_map
std::map< Addr, MessageBuffer * > m_block_map
Definition: AbstractController.hh:361
gem5::ruby::AbstractController::m_inTransUnaddressed
std::unordered_map< Addr, TransMapPair > m_inTransUnaddressed
Definition: AbstractController.hh:243
gem5::ruby::AbstractController::isBlocked
bool isBlocked(Addr) const
Definition: AbstractController.cc:327
gem5::ruby::AbstractController::m_clusterID
const NodeID m_clusterID
Definition: AbstractController.hh:354
gem5::ruby::AbstractController::m_outTransAddressed
std::unordered_map< Addr, TransMapPair > m_outTransAddressed
Definition: AbstractController.hh:241
gem5::ruby::AbstractController::PARAMS
PARAMS(RubyController)
gem5::ruby::Consumer
Definition: Consumer.hh:61
gem5::ruby::AbstractController::wakeup
virtual void wakeup()=0
gem5::ruby::AbstractController::getPort
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID)
A function used to return the port associated with this bus object.
Definition: AbstractController.cc:348
gem5::InvalidPortID
const PortID InvalidPortID
Definition: types.hh:246
gem5::ruby::AbstractController::MsgVecType
std::vector< MessageBuffer * > MsgVecType
Definition: AbstractController.hh:363
gem5::ruby::AbstractController::m_is_blocking
bool m_is_blocking
Definition: AbstractController.hh:360
gem5::ruby::AbstractController::allUpstreamDest
const NetDest & allUpstreamDest() const
List of upstream destinations (towards the CPU)
Definition: AbstractController.hh:230
gem5::ruby::AbstractController
Definition: AbstractController.hh:83
gem5::ruby::AbstractController::memRespQueueDequeued
void memRespQueueDequeued()
Definition: AbstractController.cc:451
gem5::ruby::AbstractController::enqueuePrefetch
virtual void enqueuePrefetch(const Addr &, const RubyRequestType &)
Function for enqueuing a prefetch request.
Definition: AbstractController.hh:152
gem5::ruby::AbstractController::initNetQueues
virtual void initNetQueues()=0
Initialize the message buffers.
gem5::ruby::AbstractController::functionalRead
virtual void functionalRead(const Addr &addr, PacketPtr pkt, WriteMask &mask)
Definition: AbstractController.hh:140
gem5::mask
constexpr uint64_t mask(unsigned nbits)
Generate a 64-bit mask of 'nbits' 1s, right justified.
Definition: bitfield.hh:63
packet.hh
gem5::ruby::AbstractController::ControllerStats::delayHistogram
statistics::Histogram delayHistogram
Histogram for profiling delay for the messages this controller cares for.
Definition: AbstractController.hh:450
gem5::ruby::AbstractController::m_waiting_mem_retry
bool m_waiting_mem_retry
Definition: AbstractController.hh:375
gem5::RequestPort
A RequestPort is a specialisation of a Port, which implements the default protocol for the three diff...
Definition: port.hh:118
gem5::Cycles
Cycles is a wrapper class for representing cycle counts, i.e.
Definition: types.hh:78
gem5::ruby::AbstractController::m_transitions_per_cycle
const int m_transitions_per_cycle
Definition: AbstractController.hh:371
gem5::ruby::DMASequencer
Definition: DMASequencer.hh:62
gem5::ruby::AbstractController::getDelayVCHist
statistics::Histogram & getDelayVCHist(uint32_t index)
Definition: AbstractController.hh:187
gem5::ruby::AbstractController::addrRanges
const AddrRangeList addrRanges
The address range to which the controller responds on the CPU side.
Definition: AbstractController.hh:416
gem5::ruby::AbstractController::ControllerStats::delayVCHistogram
std::vector< statistics::Histogram * > delayVCHistogram
Definition: AbstractController.hh:451
gem5::statistics::Histogram
A simple histogram stat.
Definition: statistics.hh:2125
gem5::ruby::AbstractController::MemoryPort::recvReqRetry
void recvReqRetry()
Called by the peer if sendTimingReq was called on this peer (causing recvTimingReq to be called on th...
Definition: AbstractController.cc:480
gem5::ruby::AbstractController::getAddrRanges
const AddrRangeList & getAddrRanges() const
Definition: AbstractController.hh:180
gem5::ruby::AbstractController::collateStats
virtual void collateStats()
Function for collating statistics from all the controllers of this particular type.
Definition: AbstractController.hh:167
gem5::ruby::AbstractController::outgoingTransactionStart
void outgoingTransactionStart(Addr addr, EventType type, bool isAddressed=true)
Profiles an event that initiates a transaction in a peer controller (e.g.
Definition: AbstractController.hh:311
gem5::ruby::AbstractController::functionalMemoryWrite
int functionalMemoryWrite(PacketPtr)
Definition: AbstractController.cc:363
gem5::ruby::AbstractController::incomingTransactionStart
void incomingTransactionStart(Addr addr, EventType type, StateType initialState, bool retried, bool isAddressed=true)
Profiles an event that initiates a protocol transactions for a specific line (e.g.
Definition: AbstractController.hh:261
gem5::ruby::AbstractController::initNetworkPtr
void initNetworkPtr(Network *net_ptr)
Definition: AbstractController.hh:93
gem5::VegaISA::p
Bitfield< 54 > p
Definition: pagetable.hh:70
addr_range_map.hh
gem5::ruby::RejectException
Definition: AbstractController.hh:77
gem5::ruby::AbstractController::ControllerStats::inTransLatTotal
std::vector< statistics::Scalar * > inTransLatTotal
Definition: AbstractController.hh:437
gem5::Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:294
DataBlock.hh
gem5::ruby::AbstractController::mapAddressToMachine
MachineID mapAddressToMachine(Addr addr, MachineType mtype) const
Map an address to the correct MachineID.
Definition: AbstractController.cc:418
gem5::ruby::AbstractController::ControllerStats::outTransLatHistRetries
std::vector< statistics::Scalar * > outTransLatHistRetries
Definition: AbstractController.hh:442
gem5::Tick
uint64_t Tick
Tick count type.
Definition: types.hh:58
gem5::X86ISA::type
type
Definition: misc.hh:734
gem5::RequestPtr
std::shared_ptr< Request > RequestPtr
Definition: request.hh:92
gem5::ruby::AbstractController::recvAtomic
Tick recvAtomic(PacketPtr pkt)
Definition: AbstractController.cc:412
gem5::ruby::AbstractController::m_buffer_size
const unsigned int m_buffer_size
Definition: AbstractController.hh:372
gem5::ruby::RejectException::what
virtual const char * what() const
Definition: AbstractController.hh:79
gem5::ruby::AbstractController::ControllerStats::ControllerStats
ControllerStats(statistics::Group *parent)
Definition: AbstractController.cc:494
gem5::ruby::AbstractController::m_cur_in_port
unsigned int m_cur_in_port
Definition: AbstractController.hh:369
gem5::ruby::AbstractController::downstreamDestinations
NetDest downstreamDestinations
Definition: AbstractController.hh:421
gem5::ruby::AbstractController::ControllerStats
Definition: AbstractController.hh:428
gem5::ruby::AbstractController::MemoryPort::MemoryPort
MemoryPort(const std::string &_name, AbstractController *_controller, PortID id=InvalidPortID)
Definition: AbstractController.cc:486
gem5::ruby::AbstractController::AbstractController
AbstractController(const Params &p)
Definition: AbstractController.cc:56
gem5::ruby::AbstractController::mRetryRespEvent
MemberEventWrapper<&AbstractController::sendRetryRespToMem > mRetryRespEvent
Definition: AbstractController.hh:425
gem5::Packet::SenderState
A virtual base opaque structure used to hold state associated with the packet (e.g....
Definition: packet.hh:468
gem5::ruby::AbstractController::notifyCoalesced
virtual void notifyCoalesced(const Addr &addr, const RubyRequestType &type, const RequestPtr &req, const DataBlock &data_blk, const bool &was_miss)
Notifies controller of a request coalesced at the sequencer.
Definition: AbstractController.hh:157
gem5::ruby::MachineID::getNum
NodeID getNum() const
Definition: MachineID.hh:67
gem5::ruby::AbstractController::downstreamAddrMap
std::unordered_map< MachineType, AddrRangeMap< MachineID, 3 > > downstreamAddrMap
Definition: AbstractController.hh:419
gem5::ruby::AbstractController::m_mem_ctrl_waiting_retry
bool m_mem_ctrl_waiting_retry
Definition: AbstractController.hh:376
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::ruby::AbstractController::SenderState::id
MachineID id
Definition: AbstractController.hh:408
gem5::ruby::AbstractController::incomingTransactionEnd
void incomingTransactionEnd(Addr addr, StateType finalState, bool isAddressed=true)
Profiles an event that ends a transaction.
Definition: AbstractController.hh:284
gem5::ruby::AbstractController::SenderState
Definition: AbstractController.hh:405
gem5::ruby::AbstractController::m_waiting_buffers
WaitingBufType m_waiting_buffers
Definition: AbstractController.hh:366
gem5::ruby::AbstractController::m_machineID
MachineID m_machineID
Definition: AbstractController.hh:353
gem5::ruby::AbstractController::recvTimingResp
bool recvTimingResp(PacketPtr pkt)
Definition: AbstractController.cc:373
gem5::ruby::AbstractController::m_version
const NodeID m_version
Definition: AbstractController.hh:352
gem5::ClockedObject
The ClockedObject class extends the SimObject with a clock and accessor functions to relate ticks to ...
Definition: clocked_object.hh:234
gem5::ruby::AbstractController::init
void init()
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition: AbstractController.cc:79
addr_range.hh
gem5::ruby::NetDest
Definition: NetDest.hh:45
gem5::ruby::AbstractController::unblock
void unblock(Addr)
Definition: AbstractController.cc:333
gem5::ruby::AbstractController::stats
gem5::ruby::AbstractController::ControllerStats stats
gem5::ruby::AbstractController::mandatoryQueueLatency
virtual Cycles mandatoryQueueLatency(const RubyRequestType &param_type)
Definition: AbstractController.hh:128
gem5::ruby::AbstractController::m_outTransUnaddressed
std::unordered_map< Addr, TransMapPair > m_outTransUnaddressed
Definition: AbstractController.hh:244
gem5::ruby::AbstractController::TransMapPair
Definition: AbstractController.hh:239
MessageBuffer.hh
gem5::ruby::AbstractController::getRequestorId
RequestorID getRequestorId() const
Definition: AbstractController.hh:184
gem5::ruby::AbstractController::wakeUpAllBuffers
void wakeUpAllBuffers()
Definition: AbstractController.cc:222
gem5::ruby::AbstractController::functionalReadBuffers
virtual bool functionalReadBuffers(PacketPtr &)=0
These functions are used by ruby system to read/write the data blocks that exist with in the controll...
gem5::ruby::AbstractController::functionalWriteBuffers
virtual int functionalWriteBuffers(PacketPtr &)=0
The return value indicates the number of messages written with the data from the packet.
gem5::ruby::AbstractController::TransMapPair::transaction
unsigned transaction
Definition: AbstractController.hh:239
gem5::Port
Ports are used to interface objects to each other.
Definition: port.hh:61
gem5::ruby::AbstractController::m_in_ports
unsigned int m_in_ports
Definition: AbstractController.hh:368
gem5::ruby::AbstractController::MemoryPort::recvTimingResp
bool recvTimingResp(PacketPtr pkt)
Receive a timing response from the peer.
Definition: AbstractController.cc:474
Consumer.hh
Address.hh
gem5::ruby::AbstractController::m_net_ptr
Network * m_net_ptr
Definition: AbstractController.hh:359
gem5::ruby::AbstractController::functionalMemoryRead
void functionalMemoryRead(PacketPtr)
Definition: AbstractController.cc:354
qport.hh
gem5::ruby::AbstractController::getDMASequencer
virtual DMASequencer * getDMASequencer() const =0
clocked_object.hh
gem5::ruby::AbstractController::ControllerStats::inTransLatRetries
std::vector< statistics::Scalar * > inTransLatRetries
Definition: AbstractController.hh:436
gem5::ruby::AbstractController::upstreamDestinations
NetDest upstreamDestinations
Definition: AbstractController.hh:422
gem5::ruby::AbstractController::m_mandatory_queue_latency
const Cycles m_mandatory_queue_latency
Definition: AbstractController.hh:374
gem5::ruby::AbstractController::sendRetryRespToMem
void sendRetryRespToMem()
Definition: AbstractController.cc:466
gem5::statistics::Group
Statistics container.
Definition: group.hh:92
gem5::ruby::AbstractController::m_id
const RequestorID m_id
Definition: AbstractController.hh:357
gem5::ruby::NodeID
unsigned int NodeID
Definition: TypeDefines.hh:42
gem5::ruby::AbstractController::print
virtual void print(std::ostream &out) const =0
gem5::ruby::AbstractController::regStats
virtual void regStats()
Callback to set stat parameters.
Definition: AbstractController.cc:131
gem5::ruby::AbstractController::MemoryPort::controller
AbstractController * controller
Definition: AbstractController.hh:386
gem5::RequestorID
uint16_t RequestorID
Definition: request.hh:95
gem5::ClockedObject::Params
ClockedObjectParams Params
Parameters of ClockedObject.
Definition: clocked_object.hh:240
gem5::ruby::AbstractController::functionalWrite
virtual int functionalWrite(const Addr &addr, PacketPtr)=0
gem5::Clocked::ticksToCycles
Cycles ticksToCycles(Tick t) const
Definition: clocked_object.hh:222
gem5::ruby::AbstractController::getAccessPermission
virtual AccessPermission getAccessPermission(const Addr &addr)=0
gem5::ruby::AbstractController::memoryPort
MemoryPort memoryPort
Definition: AbstractController.hh:402
gem5::ruby::AbstractController::getMandatoryQueue
virtual MessageBuffer * getMandatoryQueue() const =0
gem5::ruby::DataBlock
Definition: DataBlock.hh:60
gem5::ruby::MessageBuffer
Definition: MessageBuffer.hh:74
std::list< AddrRange >
CacheRecorder.hh
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::ruby::AbstractController::getMemRespQueue
virtual MessageBuffer * getMemRespQueue() const =0
gem5::ruby::AbstractController::TransMapPair::time
Tick time
Definition: AbstractController.hh:239
gem5::ruby::MachineID
Definition: MachineID.hh:56
gem5::ruby::AbstractController::m_inTransAddressed
std::unordered_map< Addr, TransMapPair > m_inTransAddressed
Definition: AbstractController.hh:240
gem5::ruby::AbstractController::blockOnQueue
void blockOnQueue(Addr, MessageBuffer *)
Definition: AbstractController.cc:320
gem5::ruby::CacheRecorder
Definition: CacheRecorder.hh:73
gem5::ruby::AbstractController::functionalRead
virtual void functionalRead(const Addr &addr, PacketPtr)
Definition: AbstractController.hh:134
callback.hh
gem5::ruby::GPUCoalescer
Definition: GPUCoalescer.hh:213
gem5::Named::_name
const std::string _name
Definition: named.hh:41
gem5::ruby::AbstractController::respondsTo
bool respondsTo(Addr addr)
Definition: AbstractController.hh:190
gem5::MemberEventWrapper<&AbstractController::sendRetryRespToMem >
gem5::ruby::AbstractController::wakeUpBuffer
void wakeUpBuffer(MessageBuffer *buf, Addr addr)
Definition: AbstractController.cc:159
gem5::ruby::AbstractController::allDownstreamDest
const NetDest & allDownstreamDest() const
List of downstream destinations (towards memory)
Definition: AbstractController.hh:227
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:188
gem5::X86ISA::addr
Bitfield< 3 > addr
Definition: types.hh:84
gem5::ruby::AbstractController::stallBuffer
void stallBuffer(MessageBuffer *buf, Addr addr)
Definition: AbstractController.cc:145
eventq.hh
gem5::ruby::AbstractController::getCPUSequencer
virtual Sequencer * getCPUSequencer() const =0

Generated on Sun Jul 30 2023 01:56:59 for gem5 by doxygen 1.8.17