void
OutputUnit::decrement_credit(int out_vc)
{
- DPRINTF(RubyNetwork, "Router %d OutputUnit %d decrementing credit for "
- "outvc %d at time: %lld\n",
- m_router->get_id(), m_id, out_vc, m_router->curCycle());
+ DPRINTF(RubyNetwork, "Router %d OutputUnit %s decrementing credit:%d for "
+ "outvc %d at time: %lld for %s\n", m_router->get_id(),
+ m_router->getPortDirectionName(get_direction()),
+ outVcState[out_vc].get_credit_count(),
+ out_vc, m_router->curCycle(), m_credit_link->name());
outVcState[out_vc].decrement_credit();
}
void
OutputUnit::increment_credit(int out_vc)
{
- DPRINTF(RubyNetwork, "Router %d OutputUnit %d incrementing credit for "
- "outvc %d at time: %lld\n",
- m_router->get_id(), m_id, out_vc, m_router->curCycle());
+ DPRINTF(RubyNetwork, "Router %d OutputUnit %s incrementing credit:%d for "
+ "outvc %d at time: %lld from:%s\n", m_router->get_id(),
+ m_router->getPortDirectionName(get_direction()),
+ outVcState[out_vc].get_credit_count(),
+ out_vc, m_router->curCycle(), m_credit_link->name());
outVcState[out_vc].increment_credit();
}
bool
OutputUnit::has_credit(int out_vc)
{
- assert(outVcState[out_vc].isInState(ACTIVE_, m_router->curCycle()));
+ assert(outVcState[out_vc].isInState(ACTIVE_, curTick()));
return outVcState[out_vc].has_credit();
}
{
int vc_base = vnet*m_vc_per_vnet;
for (int vc = vc_base; vc < vc_base + m_vc_per_vnet; vc++) {
- if (is_vc_idle(vc, m_router->curCycle()))
+ if (is_vc_idle(vc, curTick()))
return true;
}
{
int vc_base = vnet*m_vc_per_vnet;
for (int vc = vc_base; vc < vc_base + m_vc_per_vnet; vc++) {
- if (is_vc_idle(vc, m_router->curCycle())) {
- outVcState[vc].setState(ACTIVE_, m_router->curCycle());
+ if (is_vc_idle(vc, curTick())) {
+ outVcState[vc].setState(ACTIVE_, curTick());
return vc;
}
}
void
OutputUnit::wakeup()
{
- if (m_credit_link->isReady(m_router->curCycle())) {
+ if (m_credit_link->isReady(curTick())) {
Credit *t_credit = (Credit*) m_credit_link->consumeLink();
increment_credit(t_credit->get_vc());
if (t_credit->is_free_signal())
- set_vc_state(IDLE_, t_credit->get_vc(), m_router->curCycle());
+ set_vc_state(IDLE_, t_credit->get_vc(), curTick());
delete t_credit;
+
+ if (m_credit_link->isReady(curTick())) {
+ scheduleEvent(Cycles(1));
+ }
}
}