00001 00021 #ifndef _genericcrossbar_h_INC 00022 #define _genericcrossbar_h_INC 00023 00024 #include "../interfaces/crossbar.h" 00025 #include <iostream> 00026 00027 using namespace std; 00028 00029 class GenericCrossbar: public Crossbar 00030 { 00031 public: 00032 GenericCrossbar (); /* constructor */ 00033 ~GenericCrossbar(); 00034 void setup( uint ports, uint vcs ); 00035 uint get_no_input_ports(); 00036 uint get_no_output_ports (); 00037 void set_no_virtual_channels ( uint no); 00038 uint get_no_channels (); 00039 uint get_map ( uint in_port, uint ch ); 00040 void configure_crossbar( uint in_port, uint out_port, uint ch ); 00041 void push (uint in_port, uint ch); 00042 void pull ( uint out_port, uint ch ); 00043 bool is_full ( uint in_port, uint ch); 00044 bool is_empty(uint out_port, uint ch); 00045 string toString() const; 00046 00047 protected: 00048 00049 private: 00050 vector < vector<uint> > map; 00051 uint input_ports; 00052 uint output_ports; 00053 uint vcs; 00054 /* 00055 * ===================================================================================== 00056 * Class: CrossbarUnit 00057 * Description: This class pairs a pointer to a flit with a bool 00058 * indicating if it is valid. 00059 * ===================================================================================== 00060 */ 00061 class CrossbarUnit 00062 { 00063 public: 00064 Flit* data; 00065 bool valid; 00066 00067 protected: 00068 00069 private: 00070 00071 }; /* ----- end of class CrossbarUnit ----- */ 00072 vector < vector<bool> > busy; 00073 void clear(); 00074 00075 }; /* ----- end of class GenericCrossbar ----- */ 00076 00077 #endif /* ----- #ifndef _genericcrossbar_h_INC ----- */ 00078