sc_sensitive.cpp

Go to the documentation of this file.
00001 /*****************************************************************************
00002 
00003   The following code is derived, directly or indirectly, from the SystemC
00004   source code Copyright (c) 1996-2006 by all Contributors.
00005   All Rights reserved.
00006 
00007   The contents of this file are subject to the restrictions and limitations
00008   set forth in the SystemC Open Source License Version 2.4 (the "License");
00009   You may not use this file except in compliance with such restrictions and
00010   limitations. You may obtain instructions on how to receive a copy of the
00011   License at http://www.systemc.org/. Software distributed by Contributors
00012   under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
00013   ANY KIND, either express or implied. See the License for the specific
00014   language governing rights and limitations under the License.
00015 
00016  *****************************************************************************/
00017 
00018 /*****************************************************************************
00019 
00020   sc_sensitive.cpp --
00021 
00022   Original Author: Stan Y. Liao, Synopsys, Inc.
00023                    Martin Janssen, Synopsys, Inc.
00024 
00025  *****************************************************************************/
00026 
00027 /*****************************************************************************
00028 
00029   MODIFICATION LOG - modifiers, enter your name, affiliation, date and
00030   changes you are making here.
00031 
00032       Name, Affiliation, Date: Bishnupriya Bhattacharya, Cadence Design Systems,
00033                                25 August, 2003
00034   Description of Modification: add make_static_sensitivity() routines to support
00035                                dynamic method process creation with static
00036                                sensitivity
00037 
00038  *****************************************************************************/
00039 
00040 
00041 // $Log: sc_sensitive.cpp,v $
00042 // Revision 1.1.1.1  2006/12/15 20:31:37  acg
00043 // SystemC 2.2
00044 //
00045 // Revision 1.8  2006/04/11 23:13:21  acg
00046 //   Andy Goodrich: Changes for reduced reset support that only includes
00047 //   sc_cthread, but has preliminary hooks for expanding to method and thread
00048 //   processes also.
00049 //
00050 // Revision 1.7  2006/01/27 17:31:24  acg
00051 //  Andy Goodrich: removed debugging comments from << operator code for types
00052 //  that are deprecated.
00053 //
00054 // Revision 1.6  2006/01/26 21:04:54  acg
00055 //  Andy Goodrich: deprecation message changes and additional messages.
00056 //
00057 // Revision 1.5  2006/01/25 00:31:19  acg
00058 //  Andy Goodrich: Changed over to use a standard message id of
00059 //  SC_ID_IEEE_1666_DEPRECATION for all deprecation messages.
00060 //
00061 // Revision 1.4  2006/01/24 20:49:05  acg
00062 // Andy Goodrich: changes to remove the use of deprecated features within the
00063 // simulator, and to issue warning messages when deprecated features are used.
00064 //
00065 // Revision 1.3  2006/01/13 18:44:30  acg
00066 // Added $Log to record CVS changes into the source.
00067 //
00068 
00069 #include "sysc/kernel/sc_event.h"
00070 #include "sysc/kernel/sc_kernel_ids.h"
00071 #include "sysc/kernel/sc_module.h"
00072 #include "sysc/kernel/sc_cthread_process.h"
00073 #include "sysc/kernel/sc_method_process.h"
00074 #include "sysc/kernel/sc_thread_process.h"
00075 #include "sysc/kernel/sc_process_handle.h"
00076 #include "sysc/kernel/sc_sensitive.h"
00077 #include "sysc/communication/sc_signal_ports.h"
00078 #include "sysc/utils/sc_utils_ids.h"
00079 
00080 namespace sc_core {
00081 
00082 // support functions
00083 
00084 static
00085 sc_method_handle
00086 as_method_handle( sc_process_b* handle_ )
00087 {
00088     return DCAST<sc_method_handle>( handle_ );
00089 }
00090 
00091 static
00092 sc_thread_handle
00093 as_thread_handle( sc_process_b* handle_ )
00094 {
00095     return DCAST<sc_thread_handle>( handle_ );
00096 }
00097 
00098 static 
00099 void
00100 warn_no_parens()
00101 {
00102     static bool warn_no_parentheses=true;
00103     if ( warn_no_parentheses )
00104     {
00105     warn_no_parentheses=false;
00106     SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_,
00107         "use of () to specify sensitivity is deprecated, use << instead" );
00108     }
00109 }
00110 
00111 // ----------------------------------------------------------------------------
00112 //  CLASS : sc_sensitive
00113 //
00114 //  Static sensitivity class for events.
00115 // ----------------------------------------------------------------------------
00116 
00117 // constructor
00118 
00119 sc_sensitive::sc_sensitive( sc_module* module_ )
00120 : m_module( module_ ),
00121   m_mode( SC_NONE_ ),
00122   m_handle( 0 )
00123 {}
00124 
00125 
00126 // destructor
00127 
00128 sc_sensitive::~sc_sensitive()
00129 {}
00130 
00131 
00132 // changing between process handles
00133 
00134 sc_sensitive&
00135 sc_sensitive::operator << ( sc_process_handle handle_ )
00136 {
00137     switch ( handle_.proc_kind() )
00138     {
00139       case SC_CTHREAD_PROC_:
00140       case SC_THREAD_PROC_:
00141         m_mode = SC_THREAD_;
00142     break;
00143       case SC_METHOD_PROC_:
00144     m_mode = SC_METHOD_;
00145     break;
00146       default:
00147     assert(0);
00148     }
00149     m_handle = (sc_process_b*)handle_;
00150     return *this;
00151 }
00152 
00153 sc_sensitive&
00154 sc_sensitive::operator << ( const sc_event& event_ )
00155 {
00156     // check
00157     if( sc_is_running() ) {
00158     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_, "simulation running" );
00159     }
00160 
00161     // make sensitive
00162     switch( m_mode ) {
00163     case SC_METHOD_:
00164     case SC_THREAD_: {
00165     m_handle->add_static_event( event_ );
00166     break;
00167     }
00168     case SC_NONE_:
00169         /* do nothing */
00170         break;
00171     }
00172 
00173     return *this;
00174 }
00175 
00176 void
00177 sc_sensitive::make_static_sensitivity(
00178     sc_process_b* handle_, const sc_event& event_)
00179 {
00180     handle_->add_static_event( event_ );
00181 }
00182 
00183 
00184 sc_sensitive&
00185 sc_sensitive::operator << ( const sc_interface& interface_ )
00186 {
00187     // check
00188     if( sc_is_running() ) {
00189     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_, "simulation running" );
00190     }
00191 
00192     // make sensitive
00193     switch( m_mode ) {
00194     case SC_METHOD_:
00195     case SC_THREAD_: {
00196     m_handle->add_static_event( interface_.default_event() );
00197     break;
00198     }
00199     case SC_NONE_:
00200         /* do nothing */
00201         break;
00202     }
00203 
00204     return *this;
00205 }
00206 
00207 void
00208 sc_sensitive::make_static_sensitivity(
00209     sc_process_b* handle_, const sc_interface& interface_)
00210 {
00211     handle_->add_static_event( interface_.default_event() );
00212 }
00213 
00214 sc_sensitive&
00215 sc_sensitive::operator << ( const sc_port_base& port_ )
00216 {
00217     // check
00218     if( sc_is_running() ) {
00219     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_, "simulation running" );
00220     }
00221 
00222     // make sensitive
00223     switch( m_mode ) {
00224     case SC_METHOD_: {
00225     port_.make_sensitive( as_method_handle( m_handle ) );
00226     break;
00227     }
00228     case SC_THREAD_: {
00229     port_.make_sensitive( as_thread_handle( m_handle ) );
00230     break;
00231     }
00232     case SC_NONE_:
00233         /* do nothing */
00234         break;
00235     }
00236 
00237     return *this;
00238 }
00239 
00240 void
00241 sc_sensitive::make_static_sensitivity(
00242     sc_process_b* handle_, const sc_port_base& port_)
00243 {
00244     sc_method_handle handle_m = as_method_handle( handle_ );
00245     if ( handle_m ) {
00246     port_.make_sensitive( handle_m );
00247     return;
00248     }
00249     sc_thread_handle handle_t = as_thread_handle( handle_ );
00250     // assert(handle_t);
00251     port_.make_sensitive( handle_t );
00252 }
00253 
00254 sc_sensitive&
00255 sc_sensitive::operator << ( sc_event_finder& event_finder_ )
00256 {
00257     // check
00258     if( sc_is_running() ) {
00259     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_, "simulation running" );
00260     }
00261 
00262     // make sensitive
00263     switch( m_mode ) {
00264     case SC_METHOD_: {
00265     event_finder_.port().make_sensitive( as_method_handle( m_handle ),
00266                          &event_finder_ );
00267     break;
00268     }
00269     case SC_THREAD_: {
00270     event_finder_.port().make_sensitive( as_thread_handle( m_handle ),
00271                          &event_finder_ );
00272     break;
00273     }
00274     case SC_NONE_:
00275         /* do nothing */
00276         break;
00277     }
00278 
00279     return *this;
00280 }
00281 
00282 void 
00283 sc_sensitive::make_static_sensitivity(
00284     sc_process_b* handle_, sc_event_finder& event_finder_)
00285 {
00286     if (sc_is_running()) {
00287       handle_->add_static_event( event_finder_.find_event() );
00288     } else {
00289     sc_method_handle handle_m = as_method_handle( handle_ );
00290     if ( handle_m ) {
00291         event_finder_.port().make_sensitive( handle_m, &event_finder_ );
00292         return;
00293         }
00294     sc_thread_handle handle_t = as_thread_handle( handle_ );
00295     // assert(handle_t);
00296     event_finder_.port().make_sensitive( handle_t, &event_finder_);
00297     }
00298 }
00299 
00300 
00301 sc_sensitive&
00302 sc_sensitive::operator () ( const sc_event& event_ )
00303 {
00304     warn_no_parens();
00305     return operator << ( event_ );
00306 }
00307 
00308 sc_sensitive&
00309 sc_sensitive::operator () ( const sc_interface& interface_ )
00310 {
00311     warn_no_parens();
00312     return operator << ( interface_ );
00313 }
00314 
00315 sc_sensitive&
00316 sc_sensitive::operator () ( const sc_port_base& port_ )
00317 {
00318     warn_no_parens();
00319     return operator << ( port_ );
00320 }
00321 
00322 sc_sensitive&
00323 sc_sensitive::operator () ( sc_event_finder& event_finder_ )
00324 {
00325     warn_no_parens();
00326     return operator << ( event_finder_ );
00327 }
00328 
00329 
00330 sc_sensitive&
00331 sc_sensitive::operator () ( sc_cthread_handle handle_,
00332                 sc_event_finder& event_finder_ )
00333 {
00334     event_finder_.port().make_sensitive( handle_, &event_finder_ );
00335     return *this;
00336 }
00337 
00338 sc_sensitive&
00339 sc_sensitive::operator () ( sc_cthread_handle handle_,
00340                 const in_if_b_type& interface_ )
00341 {
00342     handle_->add_static_event( interface_.posedge_event() );
00343     return *this;
00344 }
00345 
00346 sc_sensitive&
00347 sc_sensitive::operator () ( sc_cthread_handle handle_,
00348                 const in_if_l_type& interface_ )
00349 {
00350     handle_->add_static_event( interface_.posedge_event() );
00351     return *this;
00352 }
00353 
00354 sc_sensitive&
00355 sc_sensitive::operator () ( sc_cthread_handle handle_,
00356                 const in_port_b_type& port_ )
00357 {
00358     port_.make_sensitive( handle_, &port_.pos() );
00359     return *this;
00360 }
00361 
00362 sc_sensitive&
00363 sc_sensitive::operator () ( sc_cthread_handle handle_,
00364                 const in_port_l_type& port_ )
00365 {
00366     port_.make_sensitive( handle_, &port_.pos() );
00367     return *this;
00368 }
00369 
00370 sc_sensitive&
00371 sc_sensitive::operator () ( sc_cthread_handle handle_,
00372                 const inout_port_b_type& port_ )
00373 {
00374     port_.make_sensitive( handle_, &port_.pos() );
00375     return *this;
00376 }
00377 
00378 sc_sensitive&
00379 sc_sensitive::operator () ( sc_cthread_handle handle_,
00380                 const inout_port_l_type& port_ )
00381 {
00382     port_.make_sensitive( handle_, &port_.pos() );
00383     return *this;
00384 }
00385 
00386 void sc_sensitive::reset()
00387 {
00388     m_mode = SC_NONE_;
00389 }
00390 
00391 
00392 // ----------------------------------------------------------------------------
00393 //  CLASS : sc_sensitive_pos
00394 //
00395 //  Static sensitivity class for positive edge events.
00396 // ----------------------------------------------------------------------------
00397 
00398 static void sc_deprecated_sensitive_pos()
00399 {
00400     static bool warn_sensitive_pos=true;
00401     if ( warn_sensitive_pos )
00402     {
00403         warn_sensitive_pos=false;
00404         SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_,
00405      "sc_sensitive_pos is deprecated use sc_sensitive << with pos() instead" );
00406     }
00407 }
00408 
00409 // constructor
00410 
00411 sc_sensitive_pos::sc_sensitive_pos( sc_module* module_ )
00412 : m_module( module_ ),
00413   m_mode( SC_NONE_ ),
00414   m_handle( 0 )
00415 {}
00416 
00417 
00418 // destructor
00419 
00420 sc_sensitive_pos::~sc_sensitive_pos()
00421 {}
00422 
00423 
00424 // changing between process handles
00425 
00426 sc_sensitive_pos&
00427 sc_sensitive_pos::operator << ( sc_process_handle handle_ )
00428 {
00429     switch ( handle_.proc_kind() )
00430     {
00431       case SC_CTHREAD_PROC_:
00432       case SC_THREAD_PROC_:
00433         m_mode = SC_THREAD_;
00434     break;
00435       case SC_METHOD_PROC_:
00436     m_mode = SC_METHOD_;
00437     break;
00438       default:
00439     assert(0);
00440     }
00441     m_handle = (sc_process_b*)handle_;
00442     return *this;
00443 }
00444 
00445 sc_sensitive_pos&
00446 sc_sensitive_pos::operator << ( sc_method_handle handle_ )
00447 {
00448     m_mode = SC_METHOD_;
00449     m_handle = handle_;
00450     return *this;
00451 }
00452 
00453 sc_sensitive_pos&
00454 sc_sensitive_pos::operator << ( sc_thread_handle handle_ )
00455 {
00456     m_mode = SC_THREAD_;
00457     m_handle = handle_;
00458     return *this;
00459 }
00460 
00461 
00462 sc_sensitive_pos&
00463 sc_sensitive_pos::operator << ( const in_if_b_type& interface_ )
00464 {
00465     sc_deprecated_sensitive_pos();
00466     // check
00467     if( sc_is_running() ) {
00468     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_POS_, "simulation running" );
00469     }
00470 
00471     // make sensitive
00472     switch( m_mode ) {
00473     case SC_METHOD_:
00474     case SC_THREAD_: {
00475     m_handle->add_static_event( interface_.posedge_event() );
00476     break;
00477     }
00478     case SC_NONE_:
00479         /* do nothing */
00480         break;
00481     }
00482 
00483     return *this;
00484 }
00485 
00486 sc_sensitive_pos&
00487 sc_sensitive_pos::operator << ( const in_if_l_type& interface_ )
00488 {
00489     sc_deprecated_sensitive_pos();
00490     // check
00491     if( sc_is_running() ) {
00492     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_POS_, "simulation running" );
00493     }
00494 
00495     // make sensitive
00496     switch( m_mode ) {
00497     case SC_METHOD_:
00498     case SC_THREAD_: {
00499     m_handle->add_static_event( interface_.posedge_event() );
00500     break;
00501     }
00502     case SC_NONE_:
00503         /* do nothing */
00504         break;
00505     }
00506 
00507     return *this;
00508 }
00509 
00510 sc_sensitive_pos&
00511 sc_sensitive_pos::operator << ( const in_port_b_type& port_ )
00512 {
00513     sc_deprecated_sensitive_pos();
00514     // check
00515     if( sc_is_running() ) {
00516     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_POS_, "simulation running" );
00517     }
00518 
00519     // make sensitive
00520     switch( m_mode ) {
00521     case SC_METHOD_: {
00522     port_.make_sensitive( as_method_handle( m_handle ), &port_.pos() );
00523     break;
00524     }
00525     case SC_THREAD_: {
00526     port_.make_sensitive( as_thread_handle( m_handle ), &port_.pos() );
00527     break;
00528     }
00529     case SC_NONE_:
00530         /* do nothing */
00531         break;
00532     }
00533 
00534     return *this;
00535 }
00536 
00537 sc_sensitive_pos&
00538 sc_sensitive_pos::operator << ( const in_port_l_type& port_ )
00539 {
00540     sc_deprecated_sensitive_pos();
00541     // check
00542     if( sc_is_running() ) {
00543     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_POS_, "simulation running" );
00544     }
00545 
00546     // make sensitive
00547     switch( m_mode ) {
00548     case SC_METHOD_: {
00549     port_.make_sensitive( as_method_handle( m_handle ), &port_.pos() );
00550     break;
00551     }
00552     case SC_THREAD_: {
00553     port_.make_sensitive( as_thread_handle( m_handle ), &port_.pos() );
00554     break;
00555     }
00556     case SC_NONE_:
00557         /* do nothing */
00558         break;
00559     }
00560 
00561     return *this;
00562 }
00563 
00564 sc_sensitive_pos&
00565 sc_sensitive_pos::operator << ( const inout_port_b_type& port_ )
00566 {
00567     sc_deprecated_sensitive_pos();
00568     // check
00569     if( sc_is_running() ) {
00570     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_POS_, "simulation running" );
00571     }
00572 
00573     // make sensitive
00574     switch( m_mode ) {
00575     case SC_METHOD_: {
00576     port_.make_sensitive( as_method_handle( m_handle ), &port_.pos() );
00577     break;
00578     }
00579     case SC_THREAD_: {
00580     port_.make_sensitive( as_thread_handle( m_handle ), &port_.pos() );
00581     break;
00582     }
00583     case SC_NONE_:
00584         /* do nothing */
00585         break;
00586     }
00587 
00588     return *this;
00589 }
00590 
00591 sc_sensitive_pos&
00592 sc_sensitive_pos::operator << ( const inout_port_l_type& port_ )
00593 {
00594     sc_deprecated_sensitive_pos();
00595     // check
00596     if( sc_is_running() ) {
00597     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_POS_, "simulation running" );
00598     }
00599 
00600     // make sensitive
00601     switch( m_mode ) {
00602     case SC_METHOD_: {
00603     port_.make_sensitive( as_method_handle( m_handle ), &port_.pos() );
00604     break;
00605     }
00606     case SC_THREAD_: {
00607     port_.make_sensitive( as_thread_handle( m_handle ), &port_.pos() );
00608     break;
00609     }
00610     case SC_NONE_:
00611         /* do nothing */
00612         break;
00613     }
00614 
00615     return *this;
00616 }
00617 
00618 
00619 sc_sensitive_pos&
00620 sc_sensitive_pos::operator () ( const in_if_b_type& interface_ )
00621 {
00622     warn_no_parens();
00623     return operator << ( interface_ );
00624 }
00625 
00626 sc_sensitive_pos&
00627 sc_sensitive_pos::operator () ( const in_if_l_type& interface_ )
00628 {
00629     warn_no_parens();
00630     return operator << ( interface_ );
00631 }
00632 
00633 sc_sensitive_pos&
00634 sc_sensitive_pos::operator () ( const in_port_b_type& port_ )
00635 {
00636     warn_no_parens();
00637     return operator << ( port_ );
00638 }
00639 
00640 sc_sensitive_pos&
00641 sc_sensitive_pos::operator () ( const in_port_l_type& port_ )
00642 {
00643     warn_no_parens();
00644     return operator << ( port_ );
00645 }
00646 
00647 sc_sensitive_pos&
00648 sc_sensitive_pos::operator () ( const inout_port_b_type& port_ )
00649 {
00650     warn_no_parens();
00651     return operator << ( port_ );
00652 }
00653 
00654 sc_sensitive_pos&
00655 sc_sensitive_pos::operator () ( const inout_port_l_type& port_ )
00656 {
00657     warn_no_parens();
00658     return operator << ( port_ );
00659 }
00660 
00661 void sc_sensitive_pos::reset()
00662 {
00663     m_mode = SC_NONE_;
00664 }
00665 
00666 
00667 // ----------------------------------------------------------------------------
00668 //  CLASS : sc_sensitive_neg
00669 //
00670 //  Static sensitivity class for negative edge events.
00671 // ----------------------------------------------------------------------------
00672 
00673 static void sc_deprecated_sensitive_neg()
00674 {
00675     static bool warn_sensitive_neg=true;
00676     if ( warn_sensitive_neg )
00677     {
00678         warn_sensitive_neg=false;
00679         SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_,
00680      "sc_sensitive_neg is deprecated use sc_sensitive << with neg() instead" );
00681     }
00682 }
00683 
00684 // constructor
00685 
00686 sc_sensitive_neg::sc_sensitive_neg( sc_module* module_ )
00687 : m_module( module_ ),
00688   m_mode( SC_NONE_ ),
00689   m_handle( 0 )
00690 {}
00691 
00692 
00693 // destructor
00694 
00695 sc_sensitive_neg::~sc_sensitive_neg()
00696 {}
00697 
00698 
00699 // changing between process handles
00700 
00701 sc_sensitive_neg&
00702 sc_sensitive_neg::operator << ( sc_process_handle handle_ )
00703 {
00704     switch ( handle_.proc_kind() )
00705     {
00706       case SC_CTHREAD_PROC_:
00707       case SC_THREAD_PROC_:
00708         m_mode = SC_THREAD_;
00709     break;
00710       case SC_METHOD_PROC_:
00711     m_mode = SC_METHOD_;
00712     break;
00713       default:
00714     assert(0);
00715     }
00716     m_handle = (sc_process_b*)handle_;
00717     return *this;
00718 }
00719 
00720 sc_sensitive_neg&
00721 sc_sensitive_neg::operator << ( sc_method_handle handle_ )
00722 {
00723     m_mode = SC_METHOD_;
00724     m_handle = handle_;
00725     return *this;
00726 }
00727 
00728 sc_sensitive_neg&
00729 sc_sensitive_neg::operator << ( sc_thread_handle handle_ )
00730 {
00731     m_mode = SC_THREAD_;
00732     m_handle = handle_;
00733     return *this;
00734 }
00735 
00736 
00737 sc_sensitive_neg&
00738 sc_sensitive_neg::operator << ( const in_if_b_type& interface_ )
00739 {
00740     sc_deprecated_sensitive_neg();
00741     // check
00742     if( sc_is_running() ) {
00743     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_NEG_, "simulation running" );
00744     }
00745 
00746     // make sensitive
00747     switch( m_mode ) {
00748     case SC_METHOD_:
00749     case SC_THREAD_: {
00750     m_handle->add_static_event( interface_.negedge_event() );
00751     break;
00752     }
00753     case SC_NONE_:
00754         /* do nothing */
00755         break;
00756     }
00757 
00758     return *this;
00759 }
00760 
00761 sc_sensitive_neg&
00762 sc_sensitive_neg::operator << ( const in_if_l_type& interface_ )
00763 {
00764     sc_deprecated_sensitive_neg();
00765     // check
00766     if( sc_is_running() ) {
00767     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_NEG_, "simulation running" );
00768     }
00769 
00770     // make sensitive
00771     switch( m_mode ) {
00772     case SC_METHOD_:
00773     case SC_THREAD_: {
00774     m_handle->add_static_event( interface_.negedge_event() );
00775     break;
00776     }
00777     case SC_NONE_:
00778         /* do nothing */
00779         break;
00780     }
00781 
00782     return *this;
00783 }
00784 
00785 sc_sensitive_neg&
00786 sc_sensitive_neg::operator << ( const in_port_b_type& port_ )
00787 {
00788     sc_deprecated_sensitive_neg();
00789     // check
00790     if( sc_is_running() ) {
00791     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_NEG_, "simulation running" );
00792     }
00793 
00794     // make sensitive
00795     switch( m_mode ) {
00796     case SC_METHOD_: {
00797     port_.make_sensitive( as_method_handle( m_handle ), &port_.neg() );
00798     break;
00799     }
00800     case SC_THREAD_: {
00801     port_.make_sensitive( as_thread_handle( m_handle ), &port_.neg() );
00802     break;
00803     }
00804     case SC_NONE_:
00805         /* do nothing */
00806         break;
00807     }
00808 
00809     return *this;
00810 }
00811 
00812 sc_sensitive_neg&
00813 sc_sensitive_neg::operator << ( const in_port_l_type& port_ )
00814 {
00815     sc_deprecated_sensitive_neg();
00816     // check
00817     if( sc_is_running() ) {
00818     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_NEG_, "simulation running" );
00819     }
00820 
00821     // make sensitive
00822     switch( m_mode ) {
00823     case SC_METHOD_: {
00824     port_.make_sensitive( as_method_handle( m_handle ), &port_.neg() );
00825     break;
00826     }
00827     case SC_THREAD_: {
00828     port_.make_sensitive( as_thread_handle( m_handle ), &port_.neg() );
00829     break;
00830     }
00831     case SC_NONE_:
00832         /* do nothing */
00833         break;
00834     }
00835 
00836     return *this;
00837 }
00838 
00839 sc_sensitive_neg&
00840 sc_sensitive_neg::operator << ( const inout_port_b_type& port_ )
00841 {
00842     sc_deprecated_sensitive_neg();
00843     // check
00844     if( sc_is_running() ) {
00845     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_NEG_, "simulation running" );
00846     }
00847 
00848     // make sensitive
00849     switch( m_mode ) {
00850     case SC_METHOD_: {
00851     port_.make_sensitive( as_method_handle( m_handle ), &port_.neg() );
00852     break;
00853     }
00854     case SC_THREAD_: {
00855     port_.make_sensitive( as_thread_handle( m_handle ), &port_.neg() );
00856     break;
00857     }
00858     case SC_NONE_:
00859         /* do nothing */
00860         break;
00861     }
00862 
00863     return *this;
00864 }
00865 
00866 sc_sensitive_neg&
00867 sc_sensitive_neg::operator << ( const inout_port_l_type& port_ )
00868 {
00869     sc_deprecated_sensitive_neg();
00870     // check
00871     if( sc_is_running() ) {
00872     SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_NEG_, "simulation running" );
00873     }
00874 
00875     // make sensitive
00876     switch( m_mode ) {
00877     case SC_METHOD_: {
00878     port_.make_sensitive( as_method_handle( m_handle ), &port_.neg() );
00879     break;
00880     }
00881     case SC_THREAD_: {
00882     port_.make_sensitive( as_thread_handle( m_handle ), &port_.neg() );
00883     break;
00884     }
00885     case SC_NONE_:
00886         /* do nothing */
00887         break;
00888     }
00889 
00890     return *this;
00891 }
00892 
00893 
00894 sc_sensitive_neg&
00895 sc_sensitive_neg::operator () ( const in_if_b_type& interface_ )
00896 {
00897     warn_no_parens();
00898     return operator << ( interface_ );
00899 }
00900 
00901 sc_sensitive_neg&
00902 sc_sensitive_neg::operator () ( const in_if_l_type& interface_ )
00903 {
00904     warn_no_parens();
00905     return operator << ( interface_ );
00906 }
00907 
00908 sc_sensitive_neg&
00909 sc_sensitive_neg::operator () ( const in_port_b_type& port_ )
00910 {
00911     warn_no_parens();
00912     return operator << ( port_ );
00913 }
00914 
00915 sc_sensitive_neg&
00916 sc_sensitive_neg::operator () ( const in_port_l_type& port_ )
00917 {
00918     warn_no_parens();
00919     return operator << ( port_ );
00920 }
00921 
00922 sc_sensitive_neg&
00923 sc_sensitive_neg::operator () ( const inout_port_b_type& port_ )
00924 {
00925     warn_no_parens();
00926     return operator << ( port_ );
00927 }
00928 
00929 sc_sensitive_neg&
00930 sc_sensitive_neg::operator () ( const inout_port_l_type& port_ )
00931 {
00932     warn_no_parens();
00933     return operator << ( port_ );
00934 }
00935 
00936 void sc_sensitive_neg::reset()
00937 {
00938     m_mode = SC_NONE_;
00939 }
00940 
00941 } // namespace sc_core
00942 
00943 // Taf!

Generated on Wed Jan 21 15:32:09 2009 for SystemC by  doxygen 1.5.5