gem5  v20.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
NetworkLink.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Inria
3  * Copyright (c) 2016 Georgia Institute of Technology
4  * Copyright (c) 2008 Princeton University
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are
9  * met: redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer;
11  * redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the distribution;
14  * neither the name of the copyright holders nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 
33 
35 
37  : ClockedObject(p), Consumer(this), m_id(p->link_id),
38  m_type(NUM_LINK_TYPES_),
39  m_latency(p->link_latency),
40  linkBuffer(), link_consumer(nullptr),
41  link_srcQueue(nullptr), m_link_utilized(0),
42  m_vc_load(p->vcs_per_vnet * p->virt_nets)
43 {
44 }
45 
46 void
48 {
49  link_consumer = consumer;
50 }
51 
52 void
54 {
55  link_srcQueue = src_queue;
56 }
57 
58 void
60 {
61  assert(link_srcQueue != nullptr);
62  if (link_srcQueue->isReady(curCycle())) {
63  flit *t_flit = link_srcQueue->getTopFlit();
64  t_flit->set_time(curCycle() + m_latency);
65  linkBuffer.insert(t_flit);
68  m_vc_load[t_flit->get_vc()]++;
69  }
70 }
71 
72 void
74 {
75  for (int i = 0; i < m_vc_load.size(); i++) {
76  m_vc_load[i] = 0;
77  }
78 
79  m_link_utilized = 0;
80 }
81 
83 NetworkLinkParams::create()
84 {
85  return new NetworkLink(this);
86 }
87 
88 CreditLink *
89 CreditLinkParams::create()
90 {
91  return new CreditLink(this);
92 }
93 
94 uint32_t
96 {
97  return linkBuffer.functionalWrite(pkt);
98 }
void set_time(Cycles time)
Definition: flit.hh:63
int get_vc()
Definition: flit.hh:55
flit * getTopFlit()
Definition: flitBuffer.hh:55
Bitfield< 7 > i
void scheduleEventAbsolute(Tick timeAbs)
Definition: Consumer.cc:40
Definition: flit.hh:41
The ClockedObject class extends the SimObject with a clock and accessor functions to relate ticks to ...
Cycles curCycle() const
Determine the current cycle, corresponding to a tick aligned to a clock edge.
bool isReady(Cycles curTime)
Definition: flitBuffer.cc:50
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:249
Tick clockEdge(Cycles cycles=Cycles(0)) const
Determine the tick when a cycle begins, by default the current one, but the argument also enables the...
Bitfield< 0 > p
void insert(flit *flt)
Definition: flitBuffer.hh:70
uint32_t functionalWrite(Packet *pkt)
Definition: flitBuffer.cc:79

Generated on Thu May 28 2020 16:21:34 for gem5 by doxygen 1.8.13