00001
00002
00003
00004
00005
00006
00007
00008 #ifndef COSISYSCUTIL_H_
00009 #define COSISYSCUTIL_H_
00010
00011 stringstream _cosiptpname_ ;
00012
00013 vector< DestIp<FLITWIDTH>* > _CosiDestIpVector_ ;
00014
00015
00016 #define COSI_SOURCE_TO_IF_CONNECTION( s , d , inp , layer , length ) cout << "Connecting source " << s << " to interface " << d << endl ; \
00017 _cosiptpname_ << "S" << #s << "_Sif" << #d << "_in" << #inp ; \
00018 PtP< FLITWIDTH > S##s##_Sif##d##_in##inp( _cosiptpname_.str( ).c_str( ) , TechParam , layer , length ) ; \
00019 sc_signal< sc_bv< FLITWIDTH > > S##s##_Data ; \
00020 sc_signal< bool > S##s##_Valid ; \
00021 sc_signal< bool > S##s##_Ack ; \
00022 sc_signal< bool > S##s##_Full ; \
00023 S##s.DataOut( S##s##_Data ) ; \
00024 S##s.ValidOut( S##s##_Valid ) ; \
00025 S##s.AckIn( S##s##_Ack ) ; \
00026 S##s.FullIn( S##s##_Full ) ; \
00027 S##s##_Sif##d##_in##inp.DataIn( S##s##_Data ) ; \
00028 S##s##_Sif##d##_in##inp.ValidIn( S##s##_Valid ) ; \
00029 S##s##_Sif##d##_in##inp.AckOut( S##s##_Ack ) ; \
00030 S##s##_Sif##d##_in##inp.FullOut( S##s##_Full ) ; \
00031 sc_signal< sc_bv< FLITWIDTH > > Sif##d##_in##inp##_Data ; \
00032 sc_signal< bool > Sif##d##_in##inp##_Valid ; \
00033 sc_signal< bool > Sif##d##_in##inp##_Ack ; \
00034 sc_signal< bool > Sif##d##_in##inp##_Full ; \
00035 Sif##d.DataIn[ inp ]( Sif##d##_in##inp##_Data ) ; \
00036 Sif##d.ValidIn[ inp ]( Sif##d##_in##inp##_Valid ) ; \
00037 Sif##d.AckOut[ inp ]( Sif##d##_in##inp##_Ack ) ; \
00038 Sif##d.FullOut[ inp ]( Sif##d##_in##inp##_Full ) ; \
00039 S##s##_Sif##d##_in##inp.DataOut( Sif##d##_in##inp##_Data ) ; \
00040 S##s##_Sif##d##_in##inp.ValidOut( Sif##d##_in##inp##_Valid ) ; \
00041 S##s##_Sif##d##_in##inp.AckIn( Sif##d##_in##inp##_Ack ) ; \
00042 S##s##_Sif##d##_in##inp.FullIn( Sif##d##_in##inp##_Full ) ;
00043
00044 #define COSI_ROUTER_TO_ROUTER_CONNECTION( s , outp , d , inp , layer , length ) cout << "Connecting router " << s << " to router " << d << endl ; \
00045 _cosiptpname_ << "R" << #s << "_out" << #outp << "_R" << #d << "_in" << #inp ; \
00046 PtP< FLITWIDTH > R##s##_out##outp##_R##d##_in##inp( _cosiptpname_.str().c_str( ) , TechParam , layer , length ) ; \
00047 sc_signal< sc_bv< FLITWIDTH > > R##s##_out##outp##_Data ; \
00048 sc_signal< bool > R##s##_out##outp##_Valid ; \
00049 sc_signal< bool > R##s##_out##outp##_Ack ; \
00050 sc_signal< bool > R##s##_out##outp##_Full ; \
00051 R##s.DataOut[ outp ]( R##s##_out##outp##_Data ) ; \
00052 R##s.ValidOut[ outp ]( R##s##_out##outp##_Valid ) ; \
00053 R##s.AckIn[ outp ]( R##s##_out##outp##_Ack ) ; \
00054 R##s.FullIn[ outp ]( R##s##_out##outp##_Full ) ; \
00055 R##s##_out##outp##_R##d##_in##inp.DataIn( R##s##_out##outp##_Data ) ; \
00056 R##s##_out##outp##_R##d##_in##inp.ValidIn( R##s##_out##outp##_Valid ) ; \
00057 R##s##_out##outp##_R##d##_in##inp.AckOut( R##s##_out##outp##_Ack ) ; \
00058 R##s##_out##outp##_R##d##_in##inp.FullOut( R##s##_out##outp##_Full ) ; \
00059 sc_signal< sc_bv< FLITWIDTH > > R##d##_in##inp##_Data ; \
00060 sc_signal< bool > R##d##_in##inp##_Valid ; \
00061 sc_signal< bool > R##d##_in##inp##_Ack ; \
00062 sc_signal< bool > R##d##_in##inp##_Full ; \
00063 R##d.DataIn[ inp ]( R##d##_in##inp##_Data ) ; \
00064 R##d.ValidIn[ inp ]( R##d##_in##inp##_Valid ) ; \
00065 R##d.AckOut[ inp ]( R##d##_in##inp##_Ack ) ; \
00066 R##d.FullOut[ inp ]( R##d##_in##inp##_Full ) ; \
00067 R##s##_out##outp##_R##d##_in##inp.DataOut( R##d##_in##inp##_Data ) ; \
00068 R##s##_out##outp##_R##d##_in##inp.ValidOut( R##d##_in##inp##_Valid ) ; \
00069 R##s##_out##outp##_R##d##_in##inp.AckIn( R##d##_in##inp##_Ack ) ; \
00070 R##s##_out##outp##_R##d##_in##inp.FullIn( R##d##_in##inp##_Full ) ;
00071
00072 #define COSI_IF_TO_ROUTER_CONNECTION( s , outp , d , inp , layer , length ) cout << "Connecting interface " << s << " to router " << d << endl ; \
00073 _cosiptpname_ << "Sif" << #s << "_out" << #outp << "_R" << #d << "_in" << #inp ; \
00074 PtP< FLITWIDTH > Sif##s##_out##outp##_R##d##_in##inp( _cosiptpname_.str().c_str( ) , TechParam , layer , length ) ; \
00075 sc_signal< sc_bv< FLITWIDTH > > Sif##s##_out##outp##_Data ; \
00076 sc_signal< bool > Sif##s##_out##outp##_Valid ; \
00077 sc_signal< bool > Sif##s##_out##outp##_Ack ; \
00078 sc_signal< bool > Sif##s##_out##outp##_Full ; \
00079 Sif##s.DataOut[ outp ]( Sif##s##_out##outp##_Data ) ; \
00080 Sif##s.ValidOut[ outp ]( Sif##s##_out##outp##_Valid ) ; \
00081 Sif##s.AckIn[ outp ]( Sif##s##_out##outp##_Ack ) ; \
00082 Sif##s.FullIn[ outp ]( Sif##s##_out##outp##_Full ) ; \
00083 Sif##s##_out##outp##_R##d##_in##inp.DataIn( Sif##s##_out##outp##_Data ) ; \
00084 Sif##s##_out##outp##_R##d##_in##inp.ValidIn( Sif##s##_out##outp##_Valid ) ; \
00085 Sif##s##_out##outp##_R##d##_in##inp.AckOut( Sif##s##_out##outp##_Ack ) ; \
00086 Sif##s##_out##outp##_R##d##_in##inp.FullOut( Sif##s##_out##outp##_Full ) ; \
00087 sc_signal< sc_bv< FLITWIDTH > > R##d##_in##inp##_Data ; \
00088 sc_signal< bool > R##d##_in##inp##_Valid ; \
00089 sc_signal< bool > R##d##_in##inp##_Ack ; \
00090 sc_signal< bool > R##d##_in##inp##_Full ; \
00091 R##d.DataIn[ inp ]( R##d##_in##inp##_Data ) ; \
00092 R##d.ValidIn[ inp ]( R##d##_in##inp##_Valid ) ; \
00093 R##d.AckOut[ inp ]( R##d##_in##inp##_Ack ) ; \
00094 R##d.FullOut[ inp ]( R##d##_in##inp##_Full ) ; \
00095 Sif##s##_out##outp##_R##d##_in##inp.DataOut( R##d##_in##inp##_Data ) ; \
00096 Sif##s##_out##outp##_R##d##_in##inp.ValidOut( R##d##_in##inp##_Valid ) ; \
00097 Sif##s##_out##outp##_R##d##_in##inp.AckIn( R##d##_in##inp##_Ack ) ; \
00098 Sif##s##_out##outp##_R##d##_in##inp.FullIn( R##d##_in##inp##_Full ) ;
00099
00100 #define COSI_ROUTER_TO_IF_CONNECTION( s , outp , d , inp , layer , length ) cout << "Connecting router " << s << " to interface " << d << endl ; \
00101 _cosiptpname_ << "R" << #s << "_out" << #outp << "_Dif" << #d << "_in" << #inp ; \
00102 PtP< FLITWIDTH > R##s##_out##outp##_Dif##d##_in##inp( _cosiptpname_.str().c_str( ) , TechParam , layer , length ) ; \
00103 sc_signal< sc_bv< FLITWIDTH > > R##s##_out##outp##_Data ; \
00104 sc_signal< bool > R##s##_out##outp##_Valid ; \
00105 sc_signal< bool > R##s##_out##outp##_Ack ; \
00106 sc_signal< bool > R##s##_out##outp##_Full ; \
00107 R##s.DataOut[ outp ]( R##s##_out##outp##_Data ) ; \
00108 R##s.ValidOut[ outp ]( R##s##_out##outp##_Valid ) ; \
00109 R##s.AckIn[ outp ]( R##s##_out##outp##_Ack ) ; \
00110 R##s.FullIn[ outp ]( R##s##_out##outp##_Full ) ; \
00111 R##s##_out##outp##_Dif##d##_in##inp.DataIn( R##s##_out##outp##_Data ) ; \
00112 R##s##_out##outp##_Dif##d##_in##inp.ValidIn( R##s##_out##outp##_Valid ) ; \
00113 R##s##_out##outp##_Dif##d##_in##inp.AckOut( R##s##_out##outp##_Ack ) ; \
00114 R##s##_out##outp##_Dif##d##_in##inp.FullOut( R##s##_out##outp##_Full ) ; \
00115 sc_signal< sc_bv< FLITWIDTH > > Dif##d##_in##inp##_Data ; \
00116 sc_signal< bool > Dif##d##_in##inp##_Valid ; \
00117 sc_signal< bool > Dif##d##_in##inp##_Ack ; \
00118 sc_signal< bool > Dif##d##_in##inp##_Full ; \
00119 Dif##d.DataIn[ inp ]( Dif##d##_in##inp##_Data ) ; \
00120 Dif##d.ValidIn[ inp ]( Dif##d##_in##inp##_Valid ) ; \
00121 Dif##d.AckOut[ inp ]( Dif##d##_in##inp##_Ack ) ; \
00122 Dif##d.FullOut[ inp ]( Dif##d##_in##inp##_Full ) ; \
00123 R##s##_out##outp##_Dif##d##_in##inp.DataOut( Dif##d##_in##inp##_Data ) ; \
00124 R##s##_out##outp##_Dif##d##_in##inp.ValidOut( Dif##d##_in##inp##_Valid ) ; \
00125 R##s##_out##outp##_Dif##d##_in##inp.AckIn( Dif##d##_in##inp##_Ack ) ; \
00126 R##s##_out##outp##_Dif##d##_in##inp.FullIn( Dif##d##_in##inp##_Full ) ;
00127
00128
00129 #define COSI_IF_TO_DEST_CONNECTION( s , outp , d , layer , length ) cout << "Connecting interface " << s << " to destination " << d << endl ; \
00130 _cosiptpname_ << "Dif" << #s << "_out" << #outp << "_D" << #d; \
00131 PtP< FLITWIDTH > Dif##s##_out##outp##_D##d( _cosiptpname_.str().c_str( ) , TechParam , layer , length ) ; \
00132 sc_signal< sc_bv< FLITWIDTH > > Dif##s##_out##outp##_Data ; \
00133 sc_signal< bool > Dif##s##_out##outp##_Valid ; \
00134 sc_signal< bool > Dif##s##_out##outp##_Ack ; \
00135 sc_signal< bool > Dif##s##_out##outp##_Full ; \
00136 Dif##s.DataOut[ outp ]( Dif##s##_out##outp##_Data ) ; \
00137 Dif##s.ValidOut[ outp ]( Dif##s##_out##outp##_Valid ) ; \
00138 Dif##s.AckIn[ outp ]( Dif##s##_out##outp##_Ack ) ; \
00139 Dif##s.FullIn[ outp ]( Dif##s##_out##outp##_Full ) ; \
00140 Dif##s##_out##outp##_D##d.DataIn( Dif##s##_out##outp##_Data ) ; \
00141 Dif##s##_out##outp##_D##d.ValidIn( Dif##s##_out##outp##_Valid ) ; \
00142 Dif##s##_out##outp##_D##d.AckOut( Dif##s##_out##outp##_Ack ) ; \
00143 Dif##s##_out##outp##_D##d.FullOut( Dif##s##_out##outp##_Full ) ; \
00144 sc_signal< sc_bv< FLITWIDTH > > D##d##_Data ; \
00145 sc_signal< bool > D##d##_Valid ; \
00146 sc_signal< bool > D##d##_Ack ; \
00147 sc_signal< bool > D##d##_Full ; \
00148 D##d.DataIn( D##d##_Data ) ; \
00149 D##d.ValidIn( D##d##_Valid ) ; \
00150 D##d.AckOut( D##d##_Ack ) ; \
00151 D##d.FullOut( D##d##_Full ) ; \
00152 Dif##s##_out##outp##_D##d.DataOut( D##d##_Data ) ; \
00153 Dif##s##_out##outp##_D##d.ValidOut( D##d##_Valid ) ; \
00154 Dif##s##_out##outp##_D##d.AckIn( D##d##_Ack ) ; \
00155 Dif##s##_out##outp##_D##d.FullIn( D##d##_Full ) ;
00156
00157
00158 void _CosiAddDestIp_( DestIp<FLITWIDTH>* D ) {
00159 _CosiDestIpVector_.push_back( D ) ;
00160 }
00161
00162 #endif