|
libraries/onchipcommunication/systemc/CosiSysCutil.hGo to the documentation of this file.00001 //============================================================================ 00002 // Author : Alessandro Pinto <apinto@eecs.berkeley.edu> 00003 // University of California, Berkeley 00004 // 545 Cory Hall, Berkeley, CA 94720 00005 // Copyright : See COPYING file that comes with this distribution 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 Generated on Sun Sep 7 18:37:42 2008 for COSI by 1.5.4 |