00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00026
00027 #ifndef _IP_CHANNEL_
00028 #define _IP_CHANNEL_
00029
00030 #include "fifo.h"
00031 #include "systemc.h"
00032 #include "credit.h"
00033 #include "flit.h"
00034 #include <string>
00035 #include <iostream>
00036 #include <fstream>
00037
00039 using namespace std;
00040
00044 struct VC {
00045 sc_uint<VCS_BITSIZE> id;
00046 sc_uint<VCS_BITSIZE+1> vc_next_id;
00047 sc_uint<BUF_BITSIZE> num_buf;
00048 sc_uint<3> vc_route;
00049 fifo vcQ;
00050 };
00051
00057 template<UI num_op = NUM_OC>
00058 struct InputChannel : public sc_module {
00059
00060
00061 sc_in<bool> switch_cntrl;
00062 sc_in<flit> inport;
00063 sc_out<flit> outport[num_op];
00064
00065 sc_in<bool> outReady[num_op];
00066 sc_out<bool> vcRequest;
00067 sc_in<bool> vcReady;
00068 sc_out<sc_uint<2> > opRequest;
00069 sc_in<sc_uint<VCS_BITSIZE+1> > nextVCID;
00070 sc_out<creditLine> credit_out[NUM_VCS];
00071
00072 sc_out<request_type> rtRequest;
00073 sc_in<bool> rtReady;
00074 sc_out<sc_uint<ADDR_SIZE> > destRequest;
00075 sc_out<sc_uint<ADDR_SIZE> > sourceAddress;
00076 sc_in<sc_uint<3> > nextRt;
00077
00078
00080 SC_CTOR(InputChannel);
00081
00082
00083 void read_flit();
00084 void store_flit_VC(flit*);
00085 void route_flit();
00086 void routing_src(flit*);
00087 void routing_dst(flit*);
00088
00089 void transmit_flit();
00090
00091 void setTileID(UI tileID, UI portN, UI portS, UI portE, UI portW);
00092 void resetCounts();
00093 void closeLogs();
00094
00095 int reverse_route(int);
00096
00097
00098
00099 VC vc[NUM_VCS];
00100 UI cntrlID;
00101 UI tileID;
00102 UI portN;
00103 UI portS;
00104 UI portE;
00105 UI portW;
00106 UI numBufReads;
00107 UI numBufWrites;
00108 UI numBufsOcc;
00109 UI numVCOcc;
00110 ULL sim_count;
00111
00112 };
00113
00114 #endif
00115