summaryrefslogtreecommitdiff
path: root/src/intersim/network.hpp
blob: 601ac7a81c45ca8ad4b47e64bbbb8c593be35f50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#ifndef _NETWORK_HPP_
#define _NETWORK_HPP_

#include <vector>

#include "module.hpp"
#include "flit.hpp"
#include "credit.hpp"
#include "router.hpp"
#include "module.hpp"

#include "config_utils.hpp"

extern int gN;
extern int gK;

extern int gNodes;

class Network : public Module {
protected:

   int _size;
   int _sources;
   int _dests;
   int _channels;

   Router **_routers;

   Flit   **_inject;
   Credit **_inject_cred;

   Flit   **_eject;
   Credit **_eject_cred;

   Flit   **_chan;
   Credit **_chan_cred;

   int *_chan_use;
   int _chan_use_cycles;

   virtual void _ComputeSize( const Configuration &config ) = 0;
   virtual void _BuildNet( const Configuration &config ) = 0;

   void _Alloc( );

public:
   Network( const Configuration &config );
   virtual ~Network( );

   void WriteFlit( Flit *f, int source );
   Flit *ReadFlit( int dest );

   void    WriteCredit( Credit *c, int dest );
   Credit *ReadCredit( int source );

   int  NumSources( ) const;
   int  NumDests( ) const;

   virtual void InsertRandomFaults( const Configuration &config );
   void OutChannelFault( int r, int c, bool fault = true );

   virtual double Capacity( ) const;

   void ReadInputs( );
   void InternalStep( );
   void WriteOutputs( );

   void Display( ) const;
};

#endif