1/* 2 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 48 unchanged lines hidden (view full) --- 57 58 // record the routers 59 for (vector<BasicRouter*>::const_iterator i = p->routers.begin(); 60 i != p->routers.end(); ++i) { 61 Switch* s = safe_cast<Switch*>(*i); 62 m_switches.push_back(s); 63 s->init_net_ptr(this); 64 } |
65 66 m_int_link_buffers = p->int_link_buffers; 67 m_num_connected_buffers = 0; |
68} 69 70void 71SimpleNetwork::init() 72{ 73 Network::init(); 74 75 // The topology pointer should have already been initialized in 76 // the parent class network constructor. 77 assert(m_topology_ptr != NULL); 78 m_topology_ptr->createLinks(this); 79} 80 81SimpleNetwork::~SimpleNetwork() 82{ 83 deletePointers(m_switches); |
84 deletePointers(m_int_link_buffers); |
85} 86 87// From a switch to an endpoint node 88void 89SimpleNetwork::makeOutLink(SwitchID src, NodeID dest, BasicLink* link, 90 LinkDirection direction, 91 const NetDest& routing_table_entry) 92{ --- 26 unchanged lines hidden (view full) --- 119 LinkDirection direction, 120 const NetDest& routing_table_entry) 121{ 122 // Create a set of new MessageBuffers 123 std::vector<MessageBuffer*> queues(m_virtual_networks); 124 125 for (int i = 0; i < m_virtual_networks; i++) { 126 // allocate a buffer |
127 assert(m_num_connected_buffers < m_int_link_buffers.size()); 128 MessageBuffer* buffer_ptr = m_int_link_buffers[m_num_connected_buffers]; 129 m_num_connected_buffers++; |
130 queues[i] = buffer_ptr; |
131 } 132 133 // Connect it to the two switches 134 SimpleIntLink *simple_link = safe_cast<SimpleIntLink*>(link); 135 136 m_switches[dest]->addInPort(queues); 137 m_switches[src]->addOutPort(queues, routing_table_entry, 138 simple_link->m_latency, --- 89 unchanged lines hidden (view full) --- 228SimpleNetwork::functionalRead(Packet *pkt) 229{ 230 for (unsigned int i = 0; i < m_switches.size(); i++) { 231 if (m_switches[i]->functionalRead(pkt)) { 232 return true; 233 } 234 } 235 |
236 for (unsigned int i = 0; i < m_int_link_buffers.size(); ++i) { 237 if (m_int_link_buffers[i]->functionalRead(pkt)) { |
238 return true; 239 } 240 } 241 242 return false; 243} 244 245uint32_t 246SimpleNetwork::functionalWrite(Packet *pkt) 247{ 248 uint32_t num_functional_writes = 0; 249 250 for (unsigned int i = 0; i < m_switches.size(); i++) { 251 num_functional_writes += m_switches[i]->functionalWrite(pkt); 252 } 253 |
254 for (unsigned int i = 0; i < m_int_link_buffers.size(); ++i) { 255 num_functional_writes += m_int_link_buffers[i]->functionalWrite(pkt); |
256 } 257 return num_functional_writes; 258} |