35#include "debug/RubyNetwork.hh"
78 for (
int inport = 0; inport <
m_input_unit.size(); inport++) {
88 for (
int outport = 0; outport <
m_output_unit.size(); outport++) {
104 " not match that of Router%d(%d). Consider inserting SerDes "
117 m_input_unit.push_back(std::shared_ptr<InputUnit>(input_unit));
126 CreditLink *credit_link, uint32_t consumerVcs)
129 " Consider inserting SerDes Units");
142 m_output_unit.push_back(std::shared_ptr<OutputUnit>(output_unit));
146 routingUnit.addOutDirection(outport_dirn, port_num);
164 return routingUnit.outportCompute(route, inport, inport_dirn);
196 .name(
name() +
".buffer_reads")
201 .name(
name() +
".buffer_writes")
206 .name(
name() +
".crossbar_activity")
211 .name(
name() +
".sw_input_arbiter_activity")
216 .name(
name() +
".sw_output_arbiter_activity")
252 int num_fault_types =
m_network_ptr->fault_model->number_of_fault_types;
253 auto fault_vector = std::make_unique<float[]>(num_fault_types);
255 out <<
"Router-" <<
m_id <<
" fault vector: " << std::endl;
256 for (
int i = 0;
i < num_fault_types;
i++) {
257 out <<
" - probability of ("
260 << fault_vector[
i] << std::endl;
268 float aggregate_fault_prob;
270 &aggregate_fault_prob);
271 out <<
"Router-" <<
m_id <<
" fault probability: ";
272 out << aggregate_fault_prob << std::endl;
298 uint32_t num_functional_writes = 0;
302 num_functional_writes +=
m_input_unit[
i]->functionalWrite(pkt);
309 return num_functional_writes;
#define BASELINE_TEMPERATURE_CELCIUS
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...
Cycles is a wrapper class for representing cycle counts, i.e.
virtual std::string name() const
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
void init()
init() is called after all C++ SimObjects have been created and all ports are connected.
BasicRouter(const Params &p)
Consumer(ClockedObject *em, Event::Priority ev_prio=Event::Default_Pri)
void scheduleEvent(Cycles timeDelta)
void setLinkConsumer(Consumer *consumer)
void setSourceQueue(flitBuffer *src_queue, ClockedObject *srcClockObject)
virtual void setVcsPerVnet(uint32_t consumerVcs)
flitBuffer * getOutQueue()
void set_out_link(NetworkLink *link)
void set_credit_link(CreditLink *credit_link)
bool get_fault_vector(int temperature, float fault_vector[])
PortDirection getOutportDirection(int outport)
void addInPort(PortDirection inport_dirn, NetworkLink *link, CreditLink *credit_link)
void init()
init() is called after all C++ SimObjects have been created and all ports are connected.
uint32_t m_virtual_networks
uint32_t functionalWrite(Packet *)
statistics::Scalar m_buffer_reads
bool get_aggregate_fault_probability(int temperature, float *aggregate_fault_prob)
statistics::Scalar m_buffer_writes
GarnetNetwork * m_network_ptr
void printFaultVector(std::ostream &out)
PortDirection getInportDirection(int inport)
std::vector< std::shared_ptr< InputUnit > > m_input_unit
GarnetRouterParams Params
statistics::Scalar m_sw_input_arbiter_activity
SwitchAllocator switchAllocator
bool functionalRead(Packet *pkt, WriteMask &mask)
void printAggregateFaultProbability(std::ostream &out)
void resetStats()
Callback to reset stats.
std::string getPortDirectionName(PortDirection direction)
void grant_switch(int inport, flit *t_flit)
statistics::Scalar m_crossbar_activity
statistics::Scalar m_sw_output_arbiter_activity
int route_compute(RouteInfo route, int inport, PortDirection direction)
void addOutPort(PortDirection outport_dirn, NetworkLink *link, std::vector< NetDest > &routing_table_entry, int link_weight, CreditLink *credit_link, uint32_t consumerVcs)
void schedule_wakeup(Cycles time)
void regStats()
Callback to set stat parameters.
uint32_t get_vc_per_vnet()
CrossbarSwitch crossbarSwitch
std::vector< std::shared_ptr< OutputUnit > > m_output_unit
#define fatal_if(cond,...)
Conditional fatal macro that checks the supplied condition and only causes a fatal error if the condi...
virtual void regStats()
Callback to set stat parameters.
std::string PortDirection
const FlagsType nozero
Don't print if this is zero.
Copyright (c) 2024 Arm Limited All rights reserved.
Tick curTick()
The universal simulation clock.