00001 00024 #include <vector> 00025 #include <map> 00026 #include <deque> 00027 #include <algorithm> 00028 #include "../interfaces/networkComponent.h" 00029 #include "../../../util/genericData.h" 00030 00031 using namespace std; 00032 00033 class VcaMsgAware 00034 { 00035 public: 00036 VcaMsgAware (); 00037 ~VcaMsgAware (); 00038 vector< vector< map<uint, uint> > > winners; 00039 void init( uint ports, uint vcs); 00040 void set_no_msg_classes ( uint no_msg_classes ); 00041 void request( uint output_port, uint msg_class_id, uint requestor_id /* Usually in_port*vcs+invc */, ullint req_arrival_time ); 00042 uint pick_winners( void ); 00043 uint get_no_requestors( void ); 00044 void clear_winner( uint winner, uint oc); 00045 00046 private: 00047 vector< vector< vector<uint> > > arbiter; 00048 vector< vector< vector<ullint> > > arbiter_arrival_time; 00049 vector< vector< deque<uint> > > available_vcs; 00050 uint vcs; 00051 uint ports; 00052 uint no_mclasses; 00053 };