NetworkInterface.hh revision 11666:10d59d546ea2
16019Shines@cs.fsu.edu/* 26019Shines@cs.fsu.edu * Copyright (c) 2008 Princeton University 37152Sgblack@eecs.umich.edu * Copyright (c) 2016 Georgia Institute of Technology 47152Sgblack@eecs.umich.edu * All rights reserved. 57152Sgblack@eecs.umich.edu * 67152Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 77152Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 87152Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 97152Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 107152Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 117152Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 127152Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 137152Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 147152Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 156019Shines@cs.fsu.edu * this software without specific prior written permission. 166019Shines@cs.fsu.edu * 176019Shines@cs.fsu.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 186019Shines@cs.fsu.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 196019Shines@cs.fsu.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 206019Shines@cs.fsu.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 216019Shines@cs.fsu.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 226019Shines@cs.fsu.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 236019Shines@cs.fsu.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 246019Shines@cs.fsu.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 256019Shines@cs.fsu.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 266019Shines@cs.fsu.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 276019Shines@cs.fsu.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 286019Shines@cs.fsu.edu * 296019Shines@cs.fsu.edu * Authors: Niket Agarwal 306019Shines@cs.fsu.edu * Tushar Krishna 316019Shines@cs.fsu.edu */ 326019Shines@cs.fsu.edu 336019Shines@cs.fsu.edu 346019Shines@cs.fsu.edu#ifndef __MEM_RUBY_NETWORK_GARNET_NETWORK_INTERFACE_HH__ 356019Shines@cs.fsu.edu#define __MEM_RUBY_NETWORK_GARNET_NETWORK_INTERFACE_HH__ 366019Shines@cs.fsu.edu 376019Shines@cs.fsu.edu#include <iostream> 386019Shines@cs.fsu.edu#include <vector> 396019Shines@cs.fsu.edu 406019Shines@cs.fsu.edu#include "mem/ruby/common/Consumer.hh" 416019Shines@cs.fsu.edu#include "mem/ruby/network/garnet2.0/CommonTypes.hh" 426019Shines@cs.fsu.edu#include "mem/ruby/network/garnet2.0/CreditLink.hh" 436019Shines@cs.fsu.edu#include "mem/ruby/network/garnet2.0/GarnetNetwork.hh" 446019Shines@cs.fsu.edu#include "mem/ruby/network/garnet2.0/NetworkLink.hh" 456019Shines@cs.fsu.edu#include "mem/ruby/network/garnet2.0/OutVcState.hh" 466019Shines@cs.fsu.edu#include "mem/ruby/slicc_interface/Message.hh" 476019Shines@cs.fsu.edu#include "params/GarnetNetworkInterface.hh" 487152Sgblack@eecs.umich.edu 497152Sgblack@eecs.umich.educlass MessageBuffer; 507152Sgblack@eecs.umich.educlass flitBuffer; 517152Sgblack@eecs.umich.edu 527152Sgblack@eecs.umich.educlass NetworkInterface : public ClockedObject, public Consumer 537152Sgblack@eecs.umich.edu{ 547152Sgblack@eecs.umich.edu public: 557152Sgblack@eecs.umich.edu typedef GarnetNetworkInterfaceParams Params; 567152Sgblack@eecs.umich.edu NetworkInterface(const Params *p); 577152Sgblack@eecs.umich.edu ~NetworkInterface(); 587152Sgblack@eecs.umich.edu 597152Sgblack@eecs.umich.edu void init(); 607152Sgblack@eecs.umich.edu 617152Sgblack@eecs.umich.edu void addInPort(NetworkLink *in_link, CreditLink *credit_link); 627152Sgblack@eecs.umich.edu void addOutPort(NetworkLink *out_link, CreditLink *credit_link, 637152Sgblack@eecs.umich.edu SwitchID router_id); 647152Sgblack@eecs.umich.edu 657152Sgblack@eecs.umich.edu void wakeup(); 667152Sgblack@eecs.umich.edu void addNode(std::vector<MessageBuffer *> &inNode, 677152Sgblack@eecs.umich.edu std::vector<MessageBuffer *> &outNode); 687152Sgblack@eecs.umich.edu 697152Sgblack@eecs.umich.edu void print(std::ostream& out) const; 707152Sgblack@eecs.umich.edu int get_vnet(int vc); 717152Sgblack@eecs.umich.edu int get_router_id() { return m_router_id; } 727152Sgblack@eecs.umich.edu void init_net_ptr(GarnetNetwork *net_ptr) { m_net_ptr = net_ptr; } 737152Sgblack@eecs.umich.edu 747152Sgblack@eecs.umich.edu uint32_t functionalWrite(Packet *); 757152Sgblack@eecs.umich.edu 767152Sgblack@eecs.umich.edu private: 777152Sgblack@eecs.umich.edu GarnetNetwork *m_net_ptr; 787152Sgblack@eecs.umich.edu const NodeID m_id; 797152Sgblack@eecs.umich.edu const int m_virtual_networks, m_vc_per_vnet, m_num_vcs; 807152Sgblack@eecs.umich.edu int m_router_id; // id of my router 817152Sgblack@eecs.umich.edu std::vector<OutVcState *> m_out_vc_state; 827152Sgblack@eecs.umich.edu std::vector<int> m_vc_allocator; 837152Sgblack@eecs.umich.edu int m_vc_round_robin; // For round robin scheduling 847152Sgblack@eecs.umich.edu flitBuffer *outFlitQueue; // For modeling link contention 857152Sgblack@eecs.umich.edu flitBuffer *outCreditQueue; 867152Sgblack@eecs.umich.edu 877154Sgblack@eecs.umich.edu NetworkLink *inNetLink; 887154Sgblack@eecs.umich.edu NetworkLink *outNetLink; 897154Sgblack@eecs.umich.edu CreditLink *inCreditLink; 907154Sgblack@eecs.umich.edu CreditLink *outCreditLink; 917154Sgblack@eecs.umich.edu 927154Sgblack@eecs.umich.edu // Input Flit Buffers 937154Sgblack@eecs.umich.edu // The flit buffers which will serve the Consumer 947200Sgblack@eecs.umich.edu std::vector<flitBuffer *> m_ni_out_vcs; 957154Sgblack@eecs.umich.edu std::vector<Cycles> m_ni_out_vcs_enqueue_time; 967154Sgblack@eecs.umich.edu 977154Sgblack@eecs.umich.edu // The Message buffers that takes messages from the protocol 987154Sgblack@eecs.umich.edu std::vector<MessageBuffer *> inNode_ptr; 997154Sgblack@eecs.umich.edu // The Message buffers that provides messages to the protocol 1007154Sgblack@eecs.umich.edu std::vector<MessageBuffer *> outNode_ptr; 1017154Sgblack@eecs.umich.edu 1027154Sgblack@eecs.umich.edu bool flitisizeMessage(MsgPtr msg_ptr, int vnet); 1037154Sgblack@eecs.umich.edu int calculateVC(int vnet); 1047154Sgblack@eecs.umich.edu void scheduleOutputLink(); 1057154Sgblack@eecs.umich.edu void checkReschedule(); 1067154Sgblack@eecs.umich.edu}; 1077154Sgblack@eecs.umich.edu 1087155Sgblack@eecs.umich.edu#endif // __MEM_RUBY_NETWORK_GARNET_NETWORK_INTERFACE_HH__ 1097154Sgblack@eecs.umich.edu