gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
BaseXBar::Layer< SrcType, DstType > Class Template Referenceabstract

A layer is an internal crossbar arbitration point with its own flow control. More...

#include <xbar.hh>

Inheritance diagram for BaseXBar::Layer< SrcType, DstType >:
Drainable

Public Member Functions

 Layer (DstType &_port, BaseXBar &_xbar, const std::string &_name)
 Create a layer and give it a name. More...
 
DrainState drain () override
 Drain according to the normal semantics, so that the crossbar can tell the layer to drain, and pass an event to signal back when drained. More...
 
const std::string name () const
 Get the crossbar layer's name. More...
 
bool tryTiming (SrcType *src_port)
 Determine if the layer accepts a packet from a specific port. More...
 
void succeededTiming (Tick busy_time)
 Deal with a destination port accepting a packet by potentially removing the source port from the retry list (if retrying) and occupying the layer accordingly. More...
 
void failedTiming (SrcType *src_port, Tick busy_time)
 Deal with a destination port not accepting a packet by potentially adding the source port to the retry list (if not already at the front) and occupying the layer accordingly. More...
 
void occupyLayer (Tick until)
 Occupy the layer until until. More...
 
void retryWaiting ()
 Send a retry to the port at the head of waitingForLayer. More...
 
void recvRetry ()
 Handle a retry from a neighbouring module. More...
 
void regStats ()
 Register stats for the layer. More...
 
- Public Member Functions inherited from Drainable
DrainState drainState () const
 Return the current drain state of an object. More...
 
virtual void notifyFork ()
 Notify a child process of a fork. More...
 

Protected Member Functions

virtual void sendRetry (SrcType *retry_port)=0
 Sending the actual retry, in a manner specific to the individual layers. More...
 
- Protected Member Functions inherited from Drainable
 Drainable ()
 
virtual ~Drainable ()
 
virtual void drainResume ()
 Resume execution after a successful drain. More...
 
void signalDrainDone () const
 Signal that an object is drained. More...
 

Private Types

enum  State { IDLE, BUSY, RETRY }
 We declare an enum to track the state of the layer. More...
 

Private Member Functions

void releaseLayer ()
 Release the layer after being occupied and return to an idle state where we proceed to send a retry to any potential waiting port, or drain if asked to do so. More...
 

Private Attributes

DstType & port
 The destination port this layer converges at. More...
 
BaseXBarxbar
 The crossbar this layer is a part of. More...
 
std::string _name
 A name for this layer. More...
 
State state
 track the state of the layer More...
 
std::deque< SrcType * > waitingForLayer
 A deque of ports that retry should be called on because the original send was delayed due to a busy layer. More...
 
SrcType * waitingForPeer
 Track who is waiting for the retry when receiving it from a peer. More...
 
EventWrapper< Layer,&Layer::releaseLayerreleaseEvent
 event used to schedule a release of the layer More...
 
Stats::Scalar occupancy
 Stats for occupancy and utilization. More...
 
Stats::Formula utilization
 

Detailed Description

template<typename SrcType, typename DstType>
class BaseXBar::Layer< SrcType, DstType >

A layer is an internal crossbar arbitration point with its own flow control.

Each layer is a converging multiplexer tree. By instantiating one layer per destination port (and per packet type, i.e. request, response, snoop request and snoop response), we model full crossbar structures like AXI, ACE, PCIe, etc.

The template parameter, PortClass, indicates the destination port type for the layer. The retry list holds either master ports or slave ports, depending on the direction of the layer. Thus, a request layer has a retry list containing slave ports, whereas a response layer holds master ports.

Definition at line 93 of file xbar.hh.

Member Enumeration Documentation

template<typename SrcType, typename DstType>
enum BaseXBar::Layer::State
private

We declare an enum to track the state of the layer.

The starting point is an idle state where the layer is waiting for a packet to arrive. Upon arrival, the layer transitions to the busy state, where it remains either until the packet transfer is done, or the header time is spent. Once the layer leaves the busy state, it can either go back to idle, if no packets have arrived while it was busy, or the layer goes on to retry the first port in waitingForLayer. A similar transition takes place from idle to retry if the layer receives a retry from one of its connected ports. The retry state lasts until the port in questions calls sendTiming and returns control to the layer, or goes to a busy state if the port does not immediately react to the retry by calling sendTiming.

Enumerator
IDLE 
BUSY 
RETRY 

Definition at line 215 of file xbar.hh.

Constructor & Destructor Documentation

template<typename SrcType , typename DstType>
BaseXBar::Layer< SrcType, DstType >::Layer ( DstType &  _port,
BaseXBar _xbar,
const std::string &  _name 
)

Create a layer and give it a name.

The layer uses the crossbar an event manager.

Parameters
_portdestination port the layer converges at
_xbarthe crossbar this layer belongs to
_namethe layer's name

Definition at line 147 of file xbar.cc.

Member Function Documentation

template<typename SrcType , typename DstType >
DrainState BaseXBar::Layer< SrcType, DstType >::drain ( )
overridevirtual

Drain according to the normal semantics, so that the crossbar can tell the layer to drain, and pass an event to signal back when drained.

Parameters
dedrain event to call once drained
Returns
1 if busy or waiting to retry, or 0 if idle

Implements Drainable.

Definition at line 592 of file xbar.cc.

References DPRINTF, Drained, and Draining.

template<typename SrcType, typename DstType >
void BaseXBar::Layer< SrcType, DstType >::failedTiming ( SrcType *  src_port,
Tick  busy_time 
)

Deal with a destination port not accepting a packet by potentially adding the source port to the retry list (if not already at the front) and occupying the layer accordingly.

Parameters
src_portSource port
busy_timeTime to spend as a result of a failed send

Definition at line 219 of file xbar.cc.

template<typename SrcType, typename DstType>
const std::string BaseXBar::Layer< SrcType, DstType >::name ( ) const
inline

Get the crossbar layer's name.

Definition at line 122 of file xbar.hh.

template<typename SrcType , typename DstType >
void BaseXBar::Layer< SrcType, DstType >::occupyLayer ( Tick  until)

Occupy the layer until until.

Definition at line 155 of file xbar.cc.

References curTick(), and DPRINTF.

template<typename SrcType , typename DstType >
void BaseXBar::Layer< SrcType, DstType >::recvRetry ( )

Handle a retry from a neighbouring module.

This wraps retryWaiting by verifying that there are ports waiting before calling retryWaiting.

Definition at line 300 of file xbar.cc.

template<typename SrcType , typename DstType >
void BaseXBar::Layer< SrcType, DstType >::regStats ( )

Register stats for the layer.

Definition at line 607 of file xbar.cc.

References SimObject::name(), Stats::nozero, and simTicks.

template<typename SrcType , typename DstType >
void BaseXBar::Layer< SrcType, DstType >::releaseLayer ( )
private

Release the layer after being occupied and return to an idle state where we proceed to send a retry to any potential waiting port, or drain if asked to do so.

Definition at line 241 of file xbar.cc.

References DPRINTF, Draining, Drainable::drainState(), and Drainable::signalDrainDone().

template<typename SrcType , typename DstType >
void BaseXBar::Layer< SrcType, DstType >::retryWaiting ( )

Send a retry to the port at the head of waitingForLayer.

The caller must ensure that the list is not empty.

Definition at line 265 of file xbar.cc.

template<typename SrcType, typename DstType>
virtual void BaseXBar::Layer< SrcType, DstType >::sendRetry ( SrcType *  retry_port)
protectedpure virtual

Sending the actual retry, in a manner specific to the individual layers.

Note that for a MasterPort, there is both a RequestLayer and a SnoopResponseLayer using the same port, but using different functions for the flow control.

Implemented in BaseXBar::SnoopRespLayer, BaseXBar::RespLayer, and BaseXBar::ReqLayer.

template<typename SrcType , typename DstType >
void BaseXBar::Layer< SrcType, DstType >::succeededTiming ( Tick  busy_time)

Deal with a destination port accepting a packet by potentially removing the source port from the retry list (if retrying) and occupying the layer accordingly.

Parameters
busy_timeTime to spend as a result of a successful send

Definition at line 207 of file xbar.cc.

template<typename SrcType, typename DstType >
bool BaseXBar::Layer< SrcType, DstType >::tryTiming ( SrcType *  src_port)

Determine if the layer accepts a packet from a specific port.

If not, the port in question is also added to the retry list. In either case the state of the layer is updated accordingly.

Parameters
portSource port presenting the packet
Returns
True if the layer accepts the packet

Definition at line 176 of file xbar.cc.

Member Data Documentation

template<typename SrcType, typename DstType>
std::string BaseXBar::Layer< SrcType, DstType >::_name
private

A name for this layer.

Definition at line 197 of file xbar.hh.

Referenced by BaseXBar::Layer< MasterPort, SlavePort >::name().

template<typename SrcType, typename DstType>
Stats::Scalar BaseXBar::Layer< SrcType, DstType >::occupancy
private

Stats for occupancy and utilization.

These stats capture the time the layer spends in the busy state and are thus only relevant when the memory system is in timing mode.

Definition at line 247 of file xbar.hh.

template<typename SrcType, typename DstType>
DstType& BaseXBar::Layer< SrcType, DstType >::port
private

The destination port this layer converges at.

Definition at line 191 of file xbar.hh.

template<typename SrcType, typename DstType>
EventWrapper<Layer, &Layer::releaseLayer> BaseXBar::Layer< SrcType, DstType >::releaseEvent
private

event used to schedule a release of the layer

Definition at line 240 of file xbar.hh.

template<typename SrcType, typename DstType>
State BaseXBar::Layer< SrcType, DstType >::state
private

track the state of the layer

Definition at line 218 of file xbar.hh.

template<typename SrcType, typename DstType>
Stats::Formula BaseXBar::Layer< SrcType, DstType >::utilization
private

Definition at line 248 of file xbar.hh.

template<typename SrcType, typename DstType>
std::deque<SrcType*> BaseXBar::Layer< SrcType, DstType >::waitingForLayer
private

A deque of ports that retry should be called on because the original send was delayed due to a busy layer.

Definition at line 224 of file xbar.hh.

template<typename SrcType, typename DstType>
SrcType* BaseXBar::Layer< SrcType, DstType >::waitingForPeer
private

Track who is waiting for the retry when receiving it from a peer.

If no port is waiting NULL is stored.

Definition at line 230 of file xbar.hh.

template<typename SrcType, typename DstType>
BaseXBar& BaseXBar::Layer< SrcType, DstType >::xbar
private

The crossbar this layer is a part of.

Definition at line 194 of file xbar.hh.

Referenced by BaseXBar::Layer< MasterPort, SlavePort >::name().


The documentation for this class was generated from the following files:

Generated on Fri Jun 9 2017 13:04:03 for gem5 by doxygen 1.8.6