summaryrefslogtreecommitdiff
path: root/src/mem/ruby/network/garnet/flexible-pipeline
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/network/garnet/flexible-pipeline')
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh6
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/InVcState.cc6
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/InVcState.hh10
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc18
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh6
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc6
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh6
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/OutVcState.cc6
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/OutVcState.hh10
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/Router.cc20
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/Router.hh4
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/flit.cc12
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/flit.hh18
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.cc4
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh4
15 files changed, 70 insertions, 66 deletions
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh b/src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh
index 23a1a91be..f0fe26314 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh
@@ -40,10 +40,10 @@ class FlexibleConsumer : public Consumer
public:
FlexibleConsumer(ClockedObject *em) : Consumer(em) {}
virtual bool isBufferNotFull(int vc, int inport) { return true; }
- virtual void grant_vc(int out_port, int vc, Time grant_time) {}
- virtual void release_vc(int out_port, int vc, Time release_time) {}
+ virtual void grant_vc(int out_port, int vc, Cycles grant_time) {}
+ virtual void release_vc(int out_port, int vc, Cycles release_time) {}
virtual void request_vc(int vc, int in_port, NetDest destination,
- Time request_time) {}
+ Cycles request_time) {}
};
#endif // __MEM_RUBY_NETWORK_GARNET_FLEXIBLE_PIPELINE_FLEXIBLE_CONSUMER_HH__
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/InVcState.cc b/src/mem/ruby/network/garnet/flexible-pipeline/InVcState.cc
index d688dc1fd..dc2d3f24a 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/InVcState.cc
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/InVcState.cc
@@ -37,7 +37,7 @@ InVcState::InVcState(int id)
}
bool
-InVcState::isInState(VC_state_type state, Time request_time)
+InVcState::isInState(VC_state_type state, Cycles request_time)
{
return ((m_vc_state == state) && (request_time >= m_time) );
}
@@ -49,14 +49,14 @@ InVcState::setRoute(int route)
}
void
-InVcState::setState(VC_state_type state, Time time)
+InVcState::setState(VC_state_type state, Cycles time)
{
m_vc_state = state;
m_time = time;
}
void
-InVcState::grant_vc(int out_vc, Time grant_time)
+InVcState::grant_vc(int out_vc, Cycles grant_time)
{
m_vc_state = ACTIVE_;
m_time = grant_time;
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/InVcState.hh b/src/mem/ruby/network/garnet/flexible-pipeline/InVcState.hh
index e98bf3f7b..4f4f95f5c 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/InVcState.hh
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/InVcState.hh
@@ -31,7 +31,7 @@
#ifndef __MEM_RUBY_NETWORK_GARNET_FLEXIBLE_PIPELINE_IN_VC_STATE_HH__
#define __MEM_RUBY_NETWORK_GARNET_FLEXIBLE_PIPELINE_IN_VC_STATE_HH__
-#include "mem/ruby/common/TypeDefines.hh"
+#include "base/types.hh"
#include "mem/ruby/network/garnet/NetworkHeader.hh"
class InVcState
@@ -40,18 +40,18 @@ class InVcState
InVcState(int id);
void setRoute(int route);
- void setState(VC_state_type state, Time time);
+ void setState(VC_state_type state, Cycles time);
int get_outport();
int get_outvc();
- void grant_vc(int out_vc, Time grant_time);
- bool isInState(VC_state_type state, Time time);
+ void grant_vc(int out_vc, Cycles grant_time);
+ bool isInState(VC_state_type state, Cycles time);
private:
int m_id;
int m_route;
int m_output_vc;
VC_state_type m_vc_state;
- Time m_time;
+ Cycles m_time;
};
#endif // __MEM_RUBY_NETWORK_GARNET_FLEXIBLE_PIPELINE_IN_VC_STATE_HH__
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc
index f0d59f4b4..ddb5da716 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc
@@ -112,7 +112,7 @@ NetworkInterface::addNode(vector<MessageBuffer*>& in,
void
NetworkInterface::request_vc(int in_vc, int in_port, NetDest destination,
- Time request_time)
+ Cycles request_time)
{
inNetLink->grant_vc_link(in_vc, request_time);
}
@@ -189,7 +189,7 @@ NetworkInterface::flitisizeMessage(MsgPtr msg_ptr, int vnet)
// An output vc has been granted at the next hop to one of the vc's.
// We have to update the state of the vc to reflect this
void
-NetworkInterface::grant_vc(int out_port, int vc, Time grant_time)
+NetworkInterface::grant_vc(int out_port, int vc, Cycles grant_time)
{
assert(m_out_vc_state[vc]->isInState(VC_AB_, grant_time));
m_out_vc_state[vc]->grant_vc(grant_time);
@@ -199,7 +199,7 @@ NetworkInterface::grant_vc(int out_port, int vc, Time grant_time)
// The tail flit corresponding to this vc has been buffered at the next hop
// and thus this vc is now free
void
-NetworkInterface::release_vc(int out_port, int vc, Time release_time)
+NetworkInterface::release_vc(int out_port, int vc, Cycles release_time)
{
assert(m_out_vc_state[vc]->isInState(ACTIVE_, release_time));
m_out_vc_state[vc]->setState(IDLE_, release_time);
@@ -274,13 +274,15 @@ NetworkInterface::wakeup()
// signal the upstream router that this vc can be freed now
inNetLink->release_vc_link(t_flit->get_vc(),
- m_net_ptr->curCycle() + 1);
+ m_net_ptr->curCycle() + Cycles(1));
}
+
int vnet = t_flit->get_vnet();
m_net_ptr->increment_received_flits(vnet);
- int network_delay = m_net_ptr->curCycle() -
- t_flit->get_enqueue_time();
- int queueing_delay = t_flit->get_delay();
+ Cycles network_delay = m_net_ptr->curCycle() -
+ t_flit->get_enqueue_time();
+ Cycles queueing_delay = t_flit->get_delay();
+
m_net_ptr->increment_network_latency(network_delay, vnet);
m_net_ptr->increment_queueing_latency(queueing_delay, vnet);
delete t_flit;
@@ -312,7 +314,7 @@ NetworkInterface::scheduleOutputLink()
// Just removing the flit
flit *t_flit = m_ni_buffers[vc]->getTopFlit();
- t_flit->set_time(m_net_ptr->curCycle() + 1);
+ t_flit->set_time(m_net_ptr->curCycle() + Cycles(1));
outSrcQueue->insert(t_flit);
// schedule the out link
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh
index bcacb3f2e..a4dd36da6 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh
@@ -59,8 +59,8 @@ class NetworkInterface : public FlexibleConsumer
void wakeup();
void addNode(std::vector<MessageBuffer *> &inNode,
std::vector<MessageBuffer *> &outNode);
- void grant_vc(int out_port, int vc, Time grant_time);
- void release_vc(int out_port, int vc, Time release_time);
+ void grant_vc(int out_port, int vc, Cycles grant_time);
+ void release_vc(int out_port, int vc, Cycles release_time);
bool
isBufferNotFull(int vc, int inport)
@@ -68,7 +68,7 @@ class NetworkInterface : public FlexibleConsumer
return true;
}
void request_vc(int in_vc, int in_port, NetDest destination,
- Time request_time);
+ Cycles request_time);
void print(std::ostream& out) const;
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc
index b9faef28d..cdcd5a622 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc
@@ -78,7 +78,7 @@ NetworkLink::setSource(FlexibleConsumer *source)
}
void
-NetworkLink::request_vc_link(int vc, NetDest destination, Time request_time)
+NetworkLink::request_vc_link(int vc, NetDest destination, Cycles request_time)
{
link_consumer->request_vc(vc, m_in_port, destination, request_time);
}
@@ -90,13 +90,13 @@ NetworkLink::isBufferNotFull_link(int vc)
}
void
-NetworkLink::grant_vc_link(int vc, Time grant_time)
+NetworkLink::grant_vc_link(int vc, Cycles grant_time)
{
link_source->grant_vc(m_out_port, vc, grant_time);
}
void
-NetworkLink::release_vc_link(int vc, Time release_time)
+NetworkLink::release_vc_link(int vc, Cycles release_time)
{
link_source->release_vc(m_out_port, vc, release_time);
}
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh
index 3bee9f659..7003114a1 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh
@@ -64,9 +64,9 @@ class NetworkLink : public ClockedObject, public FlexibleConsumer
void setOutPort(int port);
void wakeup();
bool isReady();
- void grant_vc_link(int vc, Time grant_time);
- void release_vc_link(int vc, Time release_time);
- void request_vc_link(int vc, NetDest destination, Time request_time);
+ void grant_vc_link(int vc, Cycles grant_time);
+ void release_vc_link(int vc, Cycles release_time);
+ void request_vc_link(int vc, NetDest destination, Cycles request_time);
bool isBufferNotFull_link(int vc);
void setSource(FlexibleConsumer *source);
double getLinkUtilization();
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/OutVcState.cc b/src/mem/ruby/network/garnet/flexible-pipeline/OutVcState.cc
index c1696a551..e08f7f93a 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/OutVcState.cc
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/OutVcState.cc
@@ -37,20 +37,20 @@ OutVcState::OutVcState(int id)
}
bool
-OutVcState::isInState(VC_state_type state, Time request_time)
+OutVcState::isInState(VC_state_type state, Cycles request_time)
{
return ((m_vc_state == state) && (request_time >= m_time));
}
void
-OutVcState::grant_vc(Time grant_time)
+OutVcState::grant_vc(Cycles grant_time)
{
m_time = grant_time;
m_vc_state = ACTIVE_;
}
void
-OutVcState::setState(VC_state_type state, Time time)
+OutVcState::setState(VC_state_type state, Cycles time)
{
m_vc_state = state;
m_time = time;
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/OutVcState.hh b/src/mem/ruby/network/garnet/flexible-pipeline/OutVcState.hh
index 03ea14076..3462ee7bf 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/OutVcState.hh
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/OutVcState.hh
@@ -31,7 +31,7 @@
#ifndef __MEM_RUBY_NETWORK_GARNET_FLEXIBLE_PIPELINE_OUT_VC_STATE_HH__
#define __MEM_RUBY_NETWORK_GARNET_FLEXIBLE_PIPELINE_OUT_VC_STATE_HH__
-#include "mem/ruby/common/TypeDefines.hh"
+#include "base/types.hh"
#include "mem/ruby/network/garnet/NetworkHeader.hh"
class OutVcState
@@ -39,13 +39,13 @@ class OutVcState
public:
OutVcState(int id);
- bool isInState(VC_state_type state, Time request_time);
- void setState(VC_state_type state, Time time);
- void grant_vc(Time grant_time);
+ bool isInState(VC_state_type state, Cycles request_time);
+ void setState(VC_state_type state, Cycles time);
+ void grant_vc(Cycles grant_time);
private:
int m_id ;
- Time m_time;
+ Cycles m_time;
VC_state_type m_vc_state;
};
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc
index 71ee1d0bf..98317818b 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc
@@ -227,7 +227,7 @@ Router::get_valid_vcs(int invc)
}
void
-Router::grant_vc(int out_port, int vc, Time grant_time)
+Router::grant_vc(int out_port, int vc, Cycles grant_time)
{
assert(m_out_vc_state[out_port][vc]->isInState(VC_AB_, grant_time));
m_out_vc_state[out_port][vc]->grant_vc(grant_time);
@@ -235,7 +235,7 @@ Router::grant_vc(int out_port, int vc, Time grant_time)
}
void
-Router::release_vc(int out_port, int vc, Time release_time)
+Router::release_vc(int out_port, int vc, Cycles release_time)
{
assert(m_out_vc_state[out_port][vc]->isInState(ACTIVE_, release_time));
m_out_vc_state[out_port][vc]->setState(IDLE_, release_time);
@@ -269,7 +269,7 @@ Router::routeCompute(flit *m_flit, int inport)
assert(m_net_ptr->getNumPipeStages() >= 1);
// Subtract 1 as 1 cycle will be consumed in scheduling the output link
- m_flit->set_time(curCycle() + (m_net_ptr->getNumPipeStages() - 1));
+ m_flit->set_time(curCycle() + Cycles((m_net_ptr->getNumPipeStages() - 1)));
m_flit->set_vc(outvc);
m_router_buffers[outport][outvc]->insert(m_flit);
@@ -282,9 +282,10 @@ Router::routeCompute(flit *m_flit, int inport)
NetDest destination = nm->getInternalDestination();
if (m_net_ptr->getNumPipeStages() > 1) {
- m_out_vc_state[outport][outvc]->setState(VC_AB_, curCycle() + 1);
+ m_out_vc_state[outport][outvc]->setState(VC_AB_, curCycle() +
+ Cycles(1));
m_out_link[outport]->request_vc_link(outvc, destination,
- curCycle() + 1);
+ curCycle() + Cycles(1));
} else {
m_out_vc_state[outport][outvc]->setState(VC_AB_, curCycle());
m_out_link[outport]->request_vc_link(outvc, destination,
@@ -293,8 +294,8 @@ Router::routeCompute(flit *m_flit, int inport)
}
if ((m_flit->get_type() == TAIL_) || (m_flit->get_type() == HEAD_TAIL_)) {
- m_in_vc_state[inport][invc]->setState(IDLE_, curCycle() + 1);
- m_in_link[inport]->release_vc_link(invc, curCycle() + 1);
+ m_in_vc_state[inport][invc]->setState(IDLE_, curCycle() + Cycles(1));
+ m_in_link[inport]->release_vc_link(invc, curCycle() + Cycles(1));
}
}
@@ -361,7 +362,7 @@ Router::scheduleOutputLinks()
flit *t_flit =
m_router_buffers[port][vc_tolookat]->getTopFlit();
- t_flit->set_time(curCycle() + 1 );
+ t_flit->set_time(curCycle() + Cycles(1));
m_out_src_queue[port]->insert(t_flit);
m_out_link[port]->scheduleEvent(Cycles(1));
break; // done for this port
@@ -397,7 +398,8 @@ Router::check_arbiter_reschedule()
{
for (int port = 0; port < m_in_link.size(); port++) {
for (int vc = 0; vc < m_num_vcs; vc++) {
- if (m_in_vc_state[port][vc]->isInState(VC_AB_, curCycle() + 1)) {
+ if (m_in_vc_state[port][vc]->isInState(VC_AB_, curCycle() +
+ Cycles(1))) {
m_vc_arbiter->scheduleEvent(Cycles(1));
return;
}
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/Router.hh b/src/mem/ruby/network/garnet/flexible-pipeline/Router.hh
index aa31fd939..e3f193045 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/Router.hh
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/Router.hh
@@ -62,8 +62,8 @@ class Router : public BasicRouter, public FlexibleConsumer
void request_vc(int in_vc, int in_port, NetDest destination,
Cycles request_time);
bool isBufferNotFull(int vc, int inport);
- void grant_vc(int out_port, int vc, Time grant_time);
- void release_vc(int out_port, int vc, Time release_time);
+ void grant_vc(int out_port, int vc, Cycles grant_time);
+ void release_vc(int out_port, int vc, Cycles release_time);
void vc_arbitrate();
int get_vnet(int vc);
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/flit.cc b/src/mem/ruby/network/garnet/flexible-pipeline/flit.cc
index 6e858199b..7cf68560f 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/flit.cc
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/flit.cc
@@ -30,7 +30,7 @@
#include "mem/ruby/network/garnet/flexible-pipeline/flit.hh"
-flit::flit(int id, int vc, int vnet, int size, MsgPtr msg_ptr, Time curTime)
+flit::flit(int id, int vc, int vnet, int size, MsgPtr msg_ptr, Cycles curTime)
{
m_size = size;
m_msg_ptr = msg_ptr;
@@ -64,20 +64,20 @@ flit::get_id()
return m_id;
}
-Time
+Cycles
flit::get_time()
{
return m_time;
}
-Time
+Cycles
flit::get_enqueue_time()
{
return m_enqueue_time;
}
void
-flit::set_time(Time time)
+flit::set_time(Cycles time)
{
m_time = time;
}
@@ -113,12 +113,12 @@ flit::get_type()
}
void
-flit::set_delay(int delay)
+flit::set_delay(Cycles delay)
{
src_delay = delay;
}
-int
+Cycles
flit::get_delay()
{
return src_delay;
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/flit.hh b/src/mem/ruby/network/garnet/flexible-pipeline/flit.hh
index 4e5b2fb8b..ff4afbc08 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/flit.hh
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/flit.hh
@@ -31,7 +31,7 @@
#include <cassert>
#include <iostream>
-#include "mem/ruby/common/TypeDefines.hh"
+#include "base/types.hh"
#include "mem/ruby/network/garnet/NetworkHeader.hh"
#include "mem/ruby/slicc_interface/Message.hh"
@@ -41,20 +41,20 @@
class flit
{
public:
- flit(int id, int vc, int vnet, int size, MsgPtr msg_ptr, Time curTime);
+ flit(int id, int vc, int vnet, int size, MsgPtr msg_ptr, Cycles curTime);
int get_size();
int get_id();
- Time get_time();
- Time get_enqueue_time();
- void set_time(Time time);
+ Cycles get_time();
+ Cycles get_enqueue_time();
+ void set_time(Cycles time);
int get_vnet();
int get_vc();
void set_vc(int vc);
MsgPtr& get_msg_ptr();
flit_type get_type();
- void set_delay(int delay);
- int get_delay();
+ void set_delay(Cycles delay);
+ Cycles get_delay();
void print(std::ostream& out) const;
static bool
@@ -75,10 +75,10 @@ class flit
int m_vnet;
int m_vc;
int m_size;
- Time m_enqueue_time, m_time;
+ Cycles m_enqueue_time, m_time;
flit_type m_type;
MsgPtr m_msg_ptr;
- int src_delay;
+ Cycles src_delay;
};
inline std::ostream&
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.cc b/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.cc
index fd9922af7..7a8ea8c23 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.cc
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.cc
@@ -51,7 +51,7 @@ flitBuffer::isEmpty()
}
bool
-flitBuffer::isReady(Time curTime)
+flitBuffer::isReady(Cycles curTime)
{
if (m_buffer.size() != 0 ) {
flit *t_flit = m_buffer.front();
@@ -62,7 +62,7 @@ flitBuffer::isReady(Time curTime)
}
bool
-flitBuffer::isReadyForNext(Time curTime)
+flitBuffer::isReadyForNext(Cycles curTime)
{
if (m_buffer.size() != 0 ) {
flit *t_flit = m_buffer.front();
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh b/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh
index 263dcb902..4b244a608 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh
@@ -43,8 +43,8 @@ class flitBuffer
flitBuffer();
flitBuffer(int maximum_size);
- bool isReady(Time curTime);
- bool isReadyForNext(Time curTime);
+ bool isReady(Cycles curTime);
+ bool isReadyForNext(Cycles curTime);
bool isFull();
bool isEmpty();
void setMaxSize(int maximum);