libraries/onchipcommunication/systemc/CosiSysCutil.h

Go 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  doxygen 1.5.4
Contact 
©2002-2018 U.C. Regents