112027Sjungma@eit.uni-kl.de/*****************************************************************************
212027Sjungma@eit.uni-kl.de
312027Sjungma@eit.uni-kl.de  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412027Sjungma@eit.uni-kl.de  more contributor license agreements.  See the NOTICE file distributed
512027Sjungma@eit.uni-kl.de  with this work for additional information regarding copyright ownership.
612027Sjungma@eit.uni-kl.de  Accellera licenses this file to you under the Apache License, Version 2.0
712027Sjungma@eit.uni-kl.de  (the "License"); you may not use this file except in compliance with the
812027Sjungma@eit.uni-kl.de  License.  You may obtain a copy of the License at
912027Sjungma@eit.uni-kl.de
1012027Sjungma@eit.uni-kl.de    http://www.apache.org/licenses/LICENSE-2.0
1112027Sjungma@eit.uni-kl.de
1212027Sjungma@eit.uni-kl.de  Unless required by applicable law or agreed to in writing, software
1312027Sjungma@eit.uni-kl.de  distributed under the License is distributed on an "AS IS" BASIS,
1412027Sjungma@eit.uni-kl.de  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512027Sjungma@eit.uni-kl.de  implied.  See the License for the specific language governing
1612027Sjungma@eit.uni-kl.de  permissions and limitations under the License.
1712027Sjungma@eit.uni-kl.de
1812027Sjungma@eit.uni-kl.de *****************************************************************************/
1912027Sjungma@eit.uni-kl.de
2012027Sjungma@eit.uni-kl.de/*****************************************************************************
2112027Sjungma@eit.uni-kl.de
2212027Sjungma@eit.uni-kl.de  sc_sensitive.cpp --
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de  Original Author: Stan Y. Liao, Synopsys, Inc.
2512027Sjungma@eit.uni-kl.de                   Martin Janssen, Synopsys, Inc.
2612027Sjungma@eit.uni-kl.de
2712027Sjungma@eit.uni-kl.de  CHANGE LOG AT THE END OF THE FILE
2812027Sjungma@eit.uni-kl.de *****************************************************************************/
2912027Sjungma@eit.uni-kl.de
3012027Sjungma@eit.uni-kl.de
3112027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_event.h"
3212027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_kernel_ids.h"
3312027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_module.h"
3412027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_cthread_process.h"
3512027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_method_process.h"
3612027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_thread_process.h"
3712027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_process_handle.h"
3812027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_sensitive.h"
3912027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_signal_ports.h"
4012027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_utils_ids.h"
4112027Sjungma@eit.uni-kl.de
4212027Sjungma@eit.uni-kl.denamespace sc_core {
4312027Sjungma@eit.uni-kl.de
4412027Sjungma@eit.uni-kl.de// support functions
4512027Sjungma@eit.uni-kl.de
4612027Sjungma@eit.uni-kl.destatic
4712027Sjungma@eit.uni-kl.desc_method_handle
4812027Sjungma@eit.uni-kl.deas_method_handle( sc_process_b* handle_ )
4912027Sjungma@eit.uni-kl.de{
5012027Sjungma@eit.uni-kl.de    return DCAST<sc_method_handle>( handle_ );
5112027Sjungma@eit.uni-kl.de}
5212027Sjungma@eit.uni-kl.de
5312027Sjungma@eit.uni-kl.destatic
5412027Sjungma@eit.uni-kl.desc_thread_handle
5512027Sjungma@eit.uni-kl.deas_thread_handle( sc_process_b* handle_ )
5612027Sjungma@eit.uni-kl.de{
5712027Sjungma@eit.uni-kl.de    return DCAST<sc_thread_handle>( handle_ );
5812027Sjungma@eit.uni-kl.de}
5912027Sjungma@eit.uni-kl.de
6012027Sjungma@eit.uni-kl.destatic
6112027Sjungma@eit.uni-kl.devoid
6212027Sjungma@eit.uni-kl.dewarn_no_parens()
6312027Sjungma@eit.uni-kl.de{
6412027Sjungma@eit.uni-kl.de    static bool warn_no_parentheses=true;
6512027Sjungma@eit.uni-kl.de    if ( warn_no_parentheses )
6612027Sjungma@eit.uni-kl.de    {
6712027Sjungma@eit.uni-kl.de	warn_no_parentheses=false;
6812027Sjungma@eit.uni-kl.de	SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_,
6912027Sjungma@eit.uni-kl.de	    "use of () to specify sensitivity is deprecated, use << instead" );
7012027Sjungma@eit.uni-kl.de    }
7112027Sjungma@eit.uni-kl.de}
7212027Sjungma@eit.uni-kl.de
7312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
7412027Sjungma@eit.uni-kl.de//  CLASS : sc_sensitive
7512027Sjungma@eit.uni-kl.de//
7612027Sjungma@eit.uni-kl.de//  Static sensitivity class for events.
7712027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
7812027Sjungma@eit.uni-kl.de
7912027Sjungma@eit.uni-kl.de// constructor
8012027Sjungma@eit.uni-kl.de
8112027Sjungma@eit.uni-kl.desc_sensitive::sc_sensitive( sc_module* module_ )
8212027Sjungma@eit.uni-kl.de: m_module( module_ ),
8312027Sjungma@eit.uni-kl.de  m_mode( SC_NONE_ ),
8412027Sjungma@eit.uni-kl.de  m_handle( 0 )
8512027Sjungma@eit.uni-kl.de{}
8612027Sjungma@eit.uni-kl.de
8712027Sjungma@eit.uni-kl.de
8812027Sjungma@eit.uni-kl.de// destructor
8912027Sjungma@eit.uni-kl.de
9012027Sjungma@eit.uni-kl.desc_sensitive::~sc_sensitive()
9112027Sjungma@eit.uni-kl.de{}
9212027Sjungma@eit.uni-kl.de
9312027Sjungma@eit.uni-kl.de
9412027Sjungma@eit.uni-kl.de// changing between process handles
9512027Sjungma@eit.uni-kl.de
9612027Sjungma@eit.uni-kl.desc_sensitive&
9712027Sjungma@eit.uni-kl.desc_sensitive::operator << ( sc_process_handle handle_ )
9812027Sjungma@eit.uni-kl.de{
9912027Sjungma@eit.uni-kl.de    switch ( handle_.proc_kind() )
10012027Sjungma@eit.uni-kl.de	{
10112027Sjungma@eit.uni-kl.de      case SC_CTHREAD_PROC_:
10212027Sjungma@eit.uni-kl.de      case SC_THREAD_PROC_:
10312027Sjungma@eit.uni-kl.de        m_mode = SC_THREAD_;
10412027Sjungma@eit.uni-kl.de	break;
10512027Sjungma@eit.uni-kl.de      case SC_METHOD_PROC_:
10612027Sjungma@eit.uni-kl.de	m_mode = SC_METHOD_;
10712027Sjungma@eit.uni-kl.de	break;
10812027Sjungma@eit.uni-kl.de      default:
10912027Sjungma@eit.uni-kl.de	assert(0);
11012027Sjungma@eit.uni-kl.de    }
11112027Sjungma@eit.uni-kl.de    m_handle = (sc_process_b*)handle_;
11212027Sjungma@eit.uni-kl.de    return *this;
11312027Sjungma@eit.uni-kl.de}
11412027Sjungma@eit.uni-kl.de
11512027Sjungma@eit.uni-kl.desc_sensitive&
11612027Sjungma@eit.uni-kl.desc_sensitive::operator << ( const sc_event& event_ )
11712027Sjungma@eit.uni-kl.de{
11812027Sjungma@eit.uni-kl.de    // check
11912027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
12012027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_, "simulation running" );
12112027Sjungma@eit.uni-kl.de    }
12212027Sjungma@eit.uni-kl.de
12312027Sjungma@eit.uni-kl.de    // make sensitive
12412027Sjungma@eit.uni-kl.de    switch( m_mode ) {
12512027Sjungma@eit.uni-kl.de    case SC_METHOD_:
12612027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
12712027Sjungma@eit.uni-kl.de	m_handle->add_static_event( event_ );
12812027Sjungma@eit.uni-kl.de	break;
12912027Sjungma@eit.uni-kl.de    }
13012027Sjungma@eit.uni-kl.de    case SC_NONE_:
13112027Sjungma@eit.uni-kl.de        /* do nothing */
13212027Sjungma@eit.uni-kl.de        break;
13312027Sjungma@eit.uni-kl.de    }
13412027Sjungma@eit.uni-kl.de
13512027Sjungma@eit.uni-kl.de    return *this;
13612027Sjungma@eit.uni-kl.de}
13712027Sjungma@eit.uni-kl.de
13812027Sjungma@eit.uni-kl.devoid
13912027Sjungma@eit.uni-kl.desc_sensitive::make_static_sensitivity(
14012027Sjungma@eit.uni-kl.de    sc_process_b* handle_, const sc_event& event_)
14112027Sjungma@eit.uni-kl.de{
14212027Sjungma@eit.uni-kl.de    handle_->add_static_event( event_ );
14312027Sjungma@eit.uni-kl.de}
14412027Sjungma@eit.uni-kl.de
14512027Sjungma@eit.uni-kl.de
14612027Sjungma@eit.uni-kl.desc_sensitive&
14712027Sjungma@eit.uni-kl.desc_sensitive::operator << ( const sc_interface& interface_ )
14812027Sjungma@eit.uni-kl.de{
14912027Sjungma@eit.uni-kl.de    // check
15012027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
15112027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_, "simulation running" );
15212027Sjungma@eit.uni-kl.de    }
15312027Sjungma@eit.uni-kl.de
15412027Sjungma@eit.uni-kl.de    // make sensitive
15512027Sjungma@eit.uni-kl.de    switch( m_mode ) {
15612027Sjungma@eit.uni-kl.de    case SC_METHOD_:
15712027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
15812027Sjungma@eit.uni-kl.de	m_handle->add_static_event( interface_.default_event() );
15912027Sjungma@eit.uni-kl.de	break;
16012027Sjungma@eit.uni-kl.de    }
16112027Sjungma@eit.uni-kl.de    case SC_NONE_:
16212027Sjungma@eit.uni-kl.de        /* do nothing */
16312027Sjungma@eit.uni-kl.de        break;
16412027Sjungma@eit.uni-kl.de    }
16512027Sjungma@eit.uni-kl.de
16612027Sjungma@eit.uni-kl.de    return *this;
16712027Sjungma@eit.uni-kl.de}
16812027Sjungma@eit.uni-kl.de
16912027Sjungma@eit.uni-kl.devoid
17012027Sjungma@eit.uni-kl.desc_sensitive::make_static_sensitivity(
17112027Sjungma@eit.uni-kl.de    sc_process_b* handle_, const sc_interface& interface_)
17212027Sjungma@eit.uni-kl.de{
17312027Sjungma@eit.uni-kl.de    handle_->add_static_event( interface_.default_event() );
17412027Sjungma@eit.uni-kl.de}
17512027Sjungma@eit.uni-kl.de
17612027Sjungma@eit.uni-kl.desc_sensitive&
17712027Sjungma@eit.uni-kl.desc_sensitive::operator << ( const sc_port_base& port_ )
17812027Sjungma@eit.uni-kl.de{
17912027Sjungma@eit.uni-kl.de    // check
18012027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
18112027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_, "simulation running" );
18212027Sjungma@eit.uni-kl.de    }
18312027Sjungma@eit.uni-kl.de
18412027Sjungma@eit.uni-kl.de    // make sensitive
18512027Sjungma@eit.uni-kl.de    switch( m_mode ) {
18612027Sjungma@eit.uni-kl.de    case SC_METHOD_: {
18712027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_method_handle( m_handle ) );
18812027Sjungma@eit.uni-kl.de	break;
18912027Sjungma@eit.uni-kl.de    }
19012027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
19112027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_thread_handle( m_handle ) );
19212027Sjungma@eit.uni-kl.de	break;
19312027Sjungma@eit.uni-kl.de    }
19412027Sjungma@eit.uni-kl.de    case SC_NONE_:
19512027Sjungma@eit.uni-kl.de        /* do nothing */
19612027Sjungma@eit.uni-kl.de        break;
19712027Sjungma@eit.uni-kl.de    }
19812027Sjungma@eit.uni-kl.de
19912027Sjungma@eit.uni-kl.de    return *this;
20012027Sjungma@eit.uni-kl.de}
20112027Sjungma@eit.uni-kl.de
20212027Sjungma@eit.uni-kl.devoid
20312027Sjungma@eit.uni-kl.desc_sensitive::make_static_sensitivity(
20412027Sjungma@eit.uni-kl.de    sc_process_b* handle_, const sc_port_base& port_)
20512027Sjungma@eit.uni-kl.de{
20612027Sjungma@eit.uni-kl.de    sc_method_handle handle_m = as_method_handle( handle_ );
20712027Sjungma@eit.uni-kl.de    if ( handle_m ) {
20812027Sjungma@eit.uni-kl.de	port_.make_sensitive( handle_m );
20912027Sjungma@eit.uni-kl.de	return;
21012027Sjungma@eit.uni-kl.de    }
21112027Sjungma@eit.uni-kl.de    sc_thread_handle handle_t = as_thread_handle( handle_ );
21212027Sjungma@eit.uni-kl.de    // assert(handle_t);
21312027Sjungma@eit.uni-kl.de    port_.make_sensitive( handle_t );
21412027Sjungma@eit.uni-kl.de}
21512027Sjungma@eit.uni-kl.de
21612027Sjungma@eit.uni-kl.desc_sensitive&
21712027Sjungma@eit.uni-kl.desc_sensitive::operator << ( sc_event_finder& event_finder_ )
21812027Sjungma@eit.uni-kl.de{
21912027Sjungma@eit.uni-kl.de    // check
22012027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
22112027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_, "simulation running" );
22212027Sjungma@eit.uni-kl.de    }
22312027Sjungma@eit.uni-kl.de
22412027Sjungma@eit.uni-kl.de    // make sensitive
22512027Sjungma@eit.uni-kl.de    switch( m_mode ) {
22612027Sjungma@eit.uni-kl.de    case SC_METHOD_: {
22712027Sjungma@eit.uni-kl.de	event_finder_.port().make_sensitive( as_method_handle( m_handle ),
22812027Sjungma@eit.uni-kl.de					     &event_finder_ );
22912027Sjungma@eit.uni-kl.de	break;
23012027Sjungma@eit.uni-kl.de    }
23112027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
23212027Sjungma@eit.uni-kl.de	event_finder_.port().make_sensitive( as_thread_handle( m_handle ),
23312027Sjungma@eit.uni-kl.de					     &event_finder_ );
23412027Sjungma@eit.uni-kl.de	break;
23512027Sjungma@eit.uni-kl.de    }
23612027Sjungma@eit.uni-kl.de    case SC_NONE_:
23712027Sjungma@eit.uni-kl.de        /* do nothing */
23812027Sjungma@eit.uni-kl.de        break;
23912027Sjungma@eit.uni-kl.de    }
24012027Sjungma@eit.uni-kl.de
24112027Sjungma@eit.uni-kl.de    return *this;
24212027Sjungma@eit.uni-kl.de}
24312027Sjungma@eit.uni-kl.de
24412027Sjungma@eit.uni-kl.devoid
24512027Sjungma@eit.uni-kl.desc_sensitive::make_static_sensitivity(
24612027Sjungma@eit.uni-kl.de    sc_process_b* handle_, sc_event_finder& event_finder_)
24712027Sjungma@eit.uni-kl.de{
24812027Sjungma@eit.uni-kl.de    if (sc_is_running()) {
24912027Sjungma@eit.uni-kl.de      handle_->add_static_event( event_finder_.find_event() );
25012027Sjungma@eit.uni-kl.de    } else {
25112027Sjungma@eit.uni-kl.de	sc_method_handle handle_m = as_method_handle( handle_ );
25212027Sjungma@eit.uni-kl.de	if ( handle_m ) {
25312027Sjungma@eit.uni-kl.de	    event_finder_.port().make_sensitive( handle_m, &event_finder_ );
25412027Sjungma@eit.uni-kl.de	    return;
25512027Sjungma@eit.uni-kl.de        }
25612027Sjungma@eit.uni-kl.de	sc_thread_handle handle_t = as_thread_handle( handle_ );
25712027Sjungma@eit.uni-kl.de	// assert(handle_t);
25812027Sjungma@eit.uni-kl.de	event_finder_.port().make_sensitive( handle_t, &event_finder_);
25912027Sjungma@eit.uni-kl.de    }
26012027Sjungma@eit.uni-kl.de}
26112027Sjungma@eit.uni-kl.de
26212027Sjungma@eit.uni-kl.de
26312027Sjungma@eit.uni-kl.desc_sensitive&
26412027Sjungma@eit.uni-kl.desc_sensitive::operator () ( const sc_event& event_ )
26512027Sjungma@eit.uni-kl.de{
26612027Sjungma@eit.uni-kl.de    warn_no_parens();
26712027Sjungma@eit.uni-kl.de    return operator << ( event_ );
26812027Sjungma@eit.uni-kl.de}
26912027Sjungma@eit.uni-kl.de
27012027Sjungma@eit.uni-kl.desc_sensitive&
27112027Sjungma@eit.uni-kl.desc_sensitive::operator () ( const sc_interface& interface_ )
27212027Sjungma@eit.uni-kl.de{
27312027Sjungma@eit.uni-kl.de    warn_no_parens();
27412027Sjungma@eit.uni-kl.de    return operator << ( interface_ );
27512027Sjungma@eit.uni-kl.de}
27612027Sjungma@eit.uni-kl.de
27712027Sjungma@eit.uni-kl.desc_sensitive&
27812027Sjungma@eit.uni-kl.desc_sensitive::operator () ( const sc_port_base& port_ )
27912027Sjungma@eit.uni-kl.de{
28012027Sjungma@eit.uni-kl.de    warn_no_parens();
28112027Sjungma@eit.uni-kl.de    return operator << ( port_ );
28212027Sjungma@eit.uni-kl.de}
28312027Sjungma@eit.uni-kl.de
28412027Sjungma@eit.uni-kl.desc_sensitive&
28512027Sjungma@eit.uni-kl.desc_sensitive::operator () ( sc_event_finder& event_finder_ )
28612027Sjungma@eit.uni-kl.de{
28712027Sjungma@eit.uni-kl.de    warn_no_parens();
28812027Sjungma@eit.uni-kl.de    return operator << ( event_finder_ );
28912027Sjungma@eit.uni-kl.de}
29012027Sjungma@eit.uni-kl.de
29112027Sjungma@eit.uni-kl.de
29212027Sjungma@eit.uni-kl.desc_sensitive&
29312027Sjungma@eit.uni-kl.desc_sensitive::operator () ( sc_cthread_handle handle_,
29412027Sjungma@eit.uni-kl.de			    sc_event_finder& event_finder_ )
29512027Sjungma@eit.uni-kl.de{
29612027Sjungma@eit.uni-kl.de    event_finder_.port().make_sensitive( handle_, &event_finder_ );
29712027Sjungma@eit.uni-kl.de    return *this;
29812027Sjungma@eit.uni-kl.de}
29912027Sjungma@eit.uni-kl.de
30012027Sjungma@eit.uni-kl.desc_sensitive&
30112027Sjungma@eit.uni-kl.desc_sensitive::operator () ( sc_cthread_handle handle_,
30212027Sjungma@eit.uni-kl.de			    const in_if_b_type& interface_ )
30312027Sjungma@eit.uni-kl.de{
30412027Sjungma@eit.uni-kl.de    handle_->add_static_event( interface_.posedge_event() );
30512027Sjungma@eit.uni-kl.de    return *this;
30612027Sjungma@eit.uni-kl.de}
30712027Sjungma@eit.uni-kl.de
30812027Sjungma@eit.uni-kl.desc_sensitive&
30912027Sjungma@eit.uni-kl.desc_sensitive::operator () ( sc_cthread_handle handle_,
31012027Sjungma@eit.uni-kl.de			    const in_if_l_type& interface_ )
31112027Sjungma@eit.uni-kl.de{
31212027Sjungma@eit.uni-kl.de    handle_->add_static_event( interface_.posedge_event() );
31312027Sjungma@eit.uni-kl.de    return *this;
31412027Sjungma@eit.uni-kl.de}
31512027Sjungma@eit.uni-kl.de
31612027Sjungma@eit.uni-kl.desc_sensitive&
31712027Sjungma@eit.uni-kl.desc_sensitive::operator () ( sc_cthread_handle handle_,
31812027Sjungma@eit.uni-kl.de			    const in_port_b_type& port_ )
31912027Sjungma@eit.uni-kl.de{
32012027Sjungma@eit.uni-kl.de    port_.make_sensitive( handle_, &port_.pos() );
32112027Sjungma@eit.uni-kl.de    return *this;
32212027Sjungma@eit.uni-kl.de}
32312027Sjungma@eit.uni-kl.de
32412027Sjungma@eit.uni-kl.desc_sensitive&
32512027Sjungma@eit.uni-kl.desc_sensitive::operator () ( sc_cthread_handle handle_,
32612027Sjungma@eit.uni-kl.de			    const in_port_l_type& port_ )
32712027Sjungma@eit.uni-kl.de{
32812027Sjungma@eit.uni-kl.de    port_.make_sensitive( handle_, &port_.pos() );
32912027Sjungma@eit.uni-kl.de    return *this;
33012027Sjungma@eit.uni-kl.de}
33112027Sjungma@eit.uni-kl.de
33212027Sjungma@eit.uni-kl.desc_sensitive&
33312027Sjungma@eit.uni-kl.desc_sensitive::operator () ( sc_cthread_handle handle_,
33412027Sjungma@eit.uni-kl.de			    const inout_port_b_type& port_ )
33512027Sjungma@eit.uni-kl.de{
33612027Sjungma@eit.uni-kl.de    port_.make_sensitive( handle_, &port_.pos() );
33712027Sjungma@eit.uni-kl.de    return *this;
33812027Sjungma@eit.uni-kl.de}
33912027Sjungma@eit.uni-kl.de
34012027Sjungma@eit.uni-kl.desc_sensitive&
34112027Sjungma@eit.uni-kl.desc_sensitive::operator () ( sc_cthread_handle handle_,
34212027Sjungma@eit.uni-kl.de			    const inout_port_l_type& port_ )
34312027Sjungma@eit.uni-kl.de{
34412027Sjungma@eit.uni-kl.de    port_.make_sensitive( handle_, &port_.pos() );
34512027Sjungma@eit.uni-kl.de    return *this;
34612027Sjungma@eit.uni-kl.de}
34712027Sjungma@eit.uni-kl.de
34812027Sjungma@eit.uni-kl.devoid sc_sensitive::reset()
34912027Sjungma@eit.uni-kl.de{
35012027Sjungma@eit.uni-kl.de    m_mode = SC_NONE_;
35112027Sjungma@eit.uni-kl.de}
35212027Sjungma@eit.uni-kl.de
35312027Sjungma@eit.uni-kl.de
35412027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
35512027Sjungma@eit.uni-kl.de//  CLASS : sc_sensitive_pos
35612027Sjungma@eit.uni-kl.de//
35712027Sjungma@eit.uni-kl.de//  Static sensitivity class for positive edge events.
35812027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
35912027Sjungma@eit.uni-kl.de
36012027Sjungma@eit.uni-kl.destatic void sc_deprecated_sensitive_pos()
36112027Sjungma@eit.uni-kl.de{
36212027Sjungma@eit.uni-kl.de    static bool warn_sensitive_pos=true;
36312027Sjungma@eit.uni-kl.de    if ( warn_sensitive_pos )
36412027Sjungma@eit.uni-kl.de    {
36512027Sjungma@eit.uni-kl.de        warn_sensitive_pos=false;
36612027Sjungma@eit.uni-kl.de        SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_,
36712027Sjungma@eit.uni-kl.de	 "sc_sensitive_pos is deprecated use sc_sensitive << with pos() instead" );
36812027Sjungma@eit.uni-kl.de    }
36912027Sjungma@eit.uni-kl.de}
37012027Sjungma@eit.uni-kl.de
37112027Sjungma@eit.uni-kl.de// constructor
37212027Sjungma@eit.uni-kl.de
37312027Sjungma@eit.uni-kl.desc_sensitive_pos::sc_sensitive_pos( sc_module* module_ )
37412027Sjungma@eit.uni-kl.de: m_module( module_ ),
37512027Sjungma@eit.uni-kl.de  m_mode( SC_NONE_ ),
37612027Sjungma@eit.uni-kl.de  m_handle( 0 )
37712027Sjungma@eit.uni-kl.de{}
37812027Sjungma@eit.uni-kl.de
37912027Sjungma@eit.uni-kl.de
38012027Sjungma@eit.uni-kl.de// destructor
38112027Sjungma@eit.uni-kl.de
38212027Sjungma@eit.uni-kl.desc_sensitive_pos::~sc_sensitive_pos()
38312027Sjungma@eit.uni-kl.de{}
38412027Sjungma@eit.uni-kl.de
38512027Sjungma@eit.uni-kl.de
38612027Sjungma@eit.uni-kl.de// changing between process handles
38712027Sjungma@eit.uni-kl.de
38812027Sjungma@eit.uni-kl.desc_sensitive_pos&
38912027Sjungma@eit.uni-kl.desc_sensitive_pos::operator << ( sc_process_handle handle_ )
39012027Sjungma@eit.uni-kl.de{
39112027Sjungma@eit.uni-kl.de    switch ( handle_.proc_kind() )
39212027Sjungma@eit.uni-kl.de	{
39312027Sjungma@eit.uni-kl.de      case SC_CTHREAD_PROC_:
39412027Sjungma@eit.uni-kl.de      case SC_THREAD_PROC_:
39512027Sjungma@eit.uni-kl.de        m_mode = SC_THREAD_;
39612027Sjungma@eit.uni-kl.de	break;
39712027Sjungma@eit.uni-kl.de      case SC_METHOD_PROC_:
39812027Sjungma@eit.uni-kl.de	m_mode = SC_METHOD_;
39912027Sjungma@eit.uni-kl.de	break;
40012027Sjungma@eit.uni-kl.de      default:
40112027Sjungma@eit.uni-kl.de	assert(0);
40212027Sjungma@eit.uni-kl.de    }
40312027Sjungma@eit.uni-kl.de    m_handle = (sc_process_b*)handle_;
40412027Sjungma@eit.uni-kl.de    return *this;
40512027Sjungma@eit.uni-kl.de}
40612027Sjungma@eit.uni-kl.de
40712027Sjungma@eit.uni-kl.desc_sensitive_pos&
40812027Sjungma@eit.uni-kl.desc_sensitive_pos::operator << ( sc_method_handle handle_ )
40912027Sjungma@eit.uni-kl.de{
41012027Sjungma@eit.uni-kl.de    m_mode = SC_METHOD_;
41112027Sjungma@eit.uni-kl.de    m_handle = handle_;
41212027Sjungma@eit.uni-kl.de    return *this;
41312027Sjungma@eit.uni-kl.de}
41412027Sjungma@eit.uni-kl.de
41512027Sjungma@eit.uni-kl.desc_sensitive_pos&
41612027Sjungma@eit.uni-kl.desc_sensitive_pos::operator << ( sc_thread_handle handle_ )
41712027Sjungma@eit.uni-kl.de{
41812027Sjungma@eit.uni-kl.de    m_mode = SC_THREAD_;
41912027Sjungma@eit.uni-kl.de    m_handle = handle_;
42012027Sjungma@eit.uni-kl.de    return *this;
42112027Sjungma@eit.uni-kl.de}
42212027Sjungma@eit.uni-kl.de
42312027Sjungma@eit.uni-kl.de
42412027Sjungma@eit.uni-kl.desc_sensitive_pos&
42512027Sjungma@eit.uni-kl.desc_sensitive_pos::operator << ( const in_if_b_type& interface_ )
42612027Sjungma@eit.uni-kl.de{
42712027Sjungma@eit.uni-kl.de    sc_deprecated_sensitive_pos();
42812027Sjungma@eit.uni-kl.de    // check
42912027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
43012027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_POS_, "simulation running" );
43112027Sjungma@eit.uni-kl.de    }
43212027Sjungma@eit.uni-kl.de
43312027Sjungma@eit.uni-kl.de    // make sensitive
43412027Sjungma@eit.uni-kl.de    switch( m_mode ) {
43512027Sjungma@eit.uni-kl.de    case SC_METHOD_:
43612027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
43712027Sjungma@eit.uni-kl.de	m_handle->add_static_event( interface_.posedge_event() );
43812027Sjungma@eit.uni-kl.de	break;
43912027Sjungma@eit.uni-kl.de    }
44012027Sjungma@eit.uni-kl.de    case SC_NONE_:
44112027Sjungma@eit.uni-kl.de        /* do nothing */
44212027Sjungma@eit.uni-kl.de        break;
44312027Sjungma@eit.uni-kl.de    }
44412027Sjungma@eit.uni-kl.de
44512027Sjungma@eit.uni-kl.de    return *this;
44612027Sjungma@eit.uni-kl.de}
44712027Sjungma@eit.uni-kl.de
44812027Sjungma@eit.uni-kl.desc_sensitive_pos&
44912027Sjungma@eit.uni-kl.desc_sensitive_pos::operator << ( const in_if_l_type& interface_ )
45012027Sjungma@eit.uni-kl.de{
45112027Sjungma@eit.uni-kl.de    sc_deprecated_sensitive_pos();
45212027Sjungma@eit.uni-kl.de    // check
45312027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
45412027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_POS_, "simulation running" );
45512027Sjungma@eit.uni-kl.de    }
45612027Sjungma@eit.uni-kl.de
45712027Sjungma@eit.uni-kl.de    // make sensitive
45812027Sjungma@eit.uni-kl.de    switch( m_mode ) {
45912027Sjungma@eit.uni-kl.de    case SC_METHOD_:
46012027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
46112027Sjungma@eit.uni-kl.de	m_handle->add_static_event( interface_.posedge_event() );
46212027Sjungma@eit.uni-kl.de	break;
46312027Sjungma@eit.uni-kl.de    }
46412027Sjungma@eit.uni-kl.de    case SC_NONE_:
46512027Sjungma@eit.uni-kl.de        /* do nothing */
46612027Sjungma@eit.uni-kl.de        break;
46712027Sjungma@eit.uni-kl.de    }
46812027Sjungma@eit.uni-kl.de
46912027Sjungma@eit.uni-kl.de    return *this;
47012027Sjungma@eit.uni-kl.de}
47112027Sjungma@eit.uni-kl.de
47212027Sjungma@eit.uni-kl.desc_sensitive_pos&
47312027Sjungma@eit.uni-kl.desc_sensitive_pos::operator << ( const in_port_b_type& port_ )
47412027Sjungma@eit.uni-kl.de{
47512027Sjungma@eit.uni-kl.de    sc_deprecated_sensitive_pos();
47612027Sjungma@eit.uni-kl.de    // check
47712027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
47812027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_POS_, "simulation running" );
47912027Sjungma@eit.uni-kl.de    }
48012027Sjungma@eit.uni-kl.de
48112027Sjungma@eit.uni-kl.de    // make sensitive
48212027Sjungma@eit.uni-kl.de    switch( m_mode ) {
48312027Sjungma@eit.uni-kl.de    case SC_METHOD_: {
48412027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_method_handle( m_handle ), &port_.pos() );
48512027Sjungma@eit.uni-kl.de	break;
48612027Sjungma@eit.uni-kl.de    }
48712027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
48812027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_thread_handle( m_handle ), &port_.pos() );
48912027Sjungma@eit.uni-kl.de	break;
49012027Sjungma@eit.uni-kl.de    }
49112027Sjungma@eit.uni-kl.de    case SC_NONE_:
49212027Sjungma@eit.uni-kl.de        /* do nothing */
49312027Sjungma@eit.uni-kl.de        break;
49412027Sjungma@eit.uni-kl.de    }
49512027Sjungma@eit.uni-kl.de
49612027Sjungma@eit.uni-kl.de    return *this;
49712027Sjungma@eit.uni-kl.de}
49812027Sjungma@eit.uni-kl.de
49912027Sjungma@eit.uni-kl.desc_sensitive_pos&
50012027Sjungma@eit.uni-kl.desc_sensitive_pos::operator << ( const in_port_l_type& port_ )
50112027Sjungma@eit.uni-kl.de{
50212027Sjungma@eit.uni-kl.de    sc_deprecated_sensitive_pos();
50312027Sjungma@eit.uni-kl.de    // check
50412027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
50512027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_POS_, "simulation running" );
50612027Sjungma@eit.uni-kl.de    }
50712027Sjungma@eit.uni-kl.de
50812027Sjungma@eit.uni-kl.de    // make sensitive
50912027Sjungma@eit.uni-kl.de    switch( m_mode ) {
51012027Sjungma@eit.uni-kl.de    case SC_METHOD_: {
51112027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_method_handle( m_handle ), &port_.pos() );
51212027Sjungma@eit.uni-kl.de	break;
51312027Sjungma@eit.uni-kl.de    }
51412027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
51512027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_thread_handle( m_handle ), &port_.pos() );
51612027Sjungma@eit.uni-kl.de	break;
51712027Sjungma@eit.uni-kl.de    }
51812027Sjungma@eit.uni-kl.de    case SC_NONE_:
51912027Sjungma@eit.uni-kl.de        /* do nothing */
52012027Sjungma@eit.uni-kl.de        break;
52112027Sjungma@eit.uni-kl.de    }
52212027Sjungma@eit.uni-kl.de
52312027Sjungma@eit.uni-kl.de    return *this;
52412027Sjungma@eit.uni-kl.de}
52512027Sjungma@eit.uni-kl.de
52612027Sjungma@eit.uni-kl.desc_sensitive_pos&
52712027Sjungma@eit.uni-kl.desc_sensitive_pos::operator << ( const inout_port_b_type& port_ )
52812027Sjungma@eit.uni-kl.de{
52912027Sjungma@eit.uni-kl.de    sc_deprecated_sensitive_pos();
53012027Sjungma@eit.uni-kl.de    // check
53112027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
53212027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_POS_, "simulation running" );
53312027Sjungma@eit.uni-kl.de    }
53412027Sjungma@eit.uni-kl.de
53512027Sjungma@eit.uni-kl.de    // make sensitive
53612027Sjungma@eit.uni-kl.de    switch( m_mode ) {
53712027Sjungma@eit.uni-kl.de    case SC_METHOD_: {
53812027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_method_handle( m_handle ), &port_.pos() );
53912027Sjungma@eit.uni-kl.de	break;
54012027Sjungma@eit.uni-kl.de    }
54112027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
54212027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_thread_handle( m_handle ), &port_.pos() );
54312027Sjungma@eit.uni-kl.de	break;
54412027Sjungma@eit.uni-kl.de    }
54512027Sjungma@eit.uni-kl.de    case SC_NONE_:
54612027Sjungma@eit.uni-kl.de        /* do nothing */
54712027Sjungma@eit.uni-kl.de        break;
54812027Sjungma@eit.uni-kl.de    }
54912027Sjungma@eit.uni-kl.de
55012027Sjungma@eit.uni-kl.de    return *this;
55112027Sjungma@eit.uni-kl.de}
55212027Sjungma@eit.uni-kl.de
55312027Sjungma@eit.uni-kl.desc_sensitive_pos&
55412027Sjungma@eit.uni-kl.desc_sensitive_pos::operator << ( const inout_port_l_type& port_ )
55512027Sjungma@eit.uni-kl.de{
55612027Sjungma@eit.uni-kl.de    sc_deprecated_sensitive_pos();
55712027Sjungma@eit.uni-kl.de    // check
55812027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
55912027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_POS_, "simulation running" );
56012027Sjungma@eit.uni-kl.de    }
56112027Sjungma@eit.uni-kl.de
56212027Sjungma@eit.uni-kl.de    // make sensitive
56312027Sjungma@eit.uni-kl.de    switch( m_mode ) {
56412027Sjungma@eit.uni-kl.de    case SC_METHOD_: {
56512027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_method_handle( m_handle ), &port_.pos() );
56612027Sjungma@eit.uni-kl.de	break;
56712027Sjungma@eit.uni-kl.de    }
56812027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
56912027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_thread_handle( m_handle ), &port_.pos() );
57012027Sjungma@eit.uni-kl.de	break;
57112027Sjungma@eit.uni-kl.de    }
57212027Sjungma@eit.uni-kl.de    case SC_NONE_:
57312027Sjungma@eit.uni-kl.de        /* do nothing */
57412027Sjungma@eit.uni-kl.de        break;
57512027Sjungma@eit.uni-kl.de    }
57612027Sjungma@eit.uni-kl.de
57712027Sjungma@eit.uni-kl.de    return *this;
57812027Sjungma@eit.uni-kl.de}
57912027Sjungma@eit.uni-kl.de
58012027Sjungma@eit.uni-kl.de
58112027Sjungma@eit.uni-kl.desc_sensitive_pos&
58212027Sjungma@eit.uni-kl.desc_sensitive_pos::operator () ( const in_if_b_type& interface_ )
58312027Sjungma@eit.uni-kl.de{
58412027Sjungma@eit.uni-kl.de    warn_no_parens();
58512027Sjungma@eit.uni-kl.de    return operator << ( interface_ );
58612027Sjungma@eit.uni-kl.de}
58712027Sjungma@eit.uni-kl.de
58812027Sjungma@eit.uni-kl.desc_sensitive_pos&
58912027Sjungma@eit.uni-kl.desc_sensitive_pos::operator () ( const in_if_l_type& interface_ )
59012027Sjungma@eit.uni-kl.de{
59112027Sjungma@eit.uni-kl.de    warn_no_parens();
59212027Sjungma@eit.uni-kl.de    return operator << ( interface_ );
59312027Sjungma@eit.uni-kl.de}
59412027Sjungma@eit.uni-kl.de
59512027Sjungma@eit.uni-kl.desc_sensitive_pos&
59612027Sjungma@eit.uni-kl.desc_sensitive_pos::operator () ( const in_port_b_type& port_ )
59712027Sjungma@eit.uni-kl.de{
59812027Sjungma@eit.uni-kl.de    warn_no_parens();
59912027Sjungma@eit.uni-kl.de    return operator << ( port_ );
60012027Sjungma@eit.uni-kl.de}
60112027Sjungma@eit.uni-kl.de
60212027Sjungma@eit.uni-kl.desc_sensitive_pos&
60312027Sjungma@eit.uni-kl.desc_sensitive_pos::operator () ( const in_port_l_type& port_ )
60412027Sjungma@eit.uni-kl.de{
60512027Sjungma@eit.uni-kl.de    warn_no_parens();
60612027Sjungma@eit.uni-kl.de    return operator << ( port_ );
60712027Sjungma@eit.uni-kl.de}
60812027Sjungma@eit.uni-kl.de
60912027Sjungma@eit.uni-kl.desc_sensitive_pos&
61012027Sjungma@eit.uni-kl.desc_sensitive_pos::operator () ( const inout_port_b_type& port_ )
61112027Sjungma@eit.uni-kl.de{
61212027Sjungma@eit.uni-kl.de    warn_no_parens();
61312027Sjungma@eit.uni-kl.de    return operator << ( port_ );
61412027Sjungma@eit.uni-kl.de}
61512027Sjungma@eit.uni-kl.de
61612027Sjungma@eit.uni-kl.desc_sensitive_pos&
61712027Sjungma@eit.uni-kl.desc_sensitive_pos::operator () ( const inout_port_l_type& port_ )
61812027Sjungma@eit.uni-kl.de{
61912027Sjungma@eit.uni-kl.de    warn_no_parens();
62012027Sjungma@eit.uni-kl.de    return operator << ( port_ );
62112027Sjungma@eit.uni-kl.de}
62212027Sjungma@eit.uni-kl.de
62312027Sjungma@eit.uni-kl.devoid sc_sensitive_pos::reset()
62412027Sjungma@eit.uni-kl.de{
62512027Sjungma@eit.uni-kl.de    m_mode = SC_NONE_;
62612027Sjungma@eit.uni-kl.de}
62712027Sjungma@eit.uni-kl.de
62812027Sjungma@eit.uni-kl.de
62912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
63012027Sjungma@eit.uni-kl.de//  CLASS : sc_sensitive_neg
63112027Sjungma@eit.uni-kl.de//
63212027Sjungma@eit.uni-kl.de//  Static sensitivity class for negative edge events.
63312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
63412027Sjungma@eit.uni-kl.de
63512027Sjungma@eit.uni-kl.destatic void sc_deprecated_sensitive_neg()
63612027Sjungma@eit.uni-kl.de{
63712027Sjungma@eit.uni-kl.de    static bool warn_sensitive_neg=true;
63812027Sjungma@eit.uni-kl.de    if ( warn_sensitive_neg )
63912027Sjungma@eit.uni-kl.de    {
64012027Sjungma@eit.uni-kl.de        warn_sensitive_neg=false;
64112027Sjungma@eit.uni-kl.de        SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_,
64212027Sjungma@eit.uni-kl.de	 "sc_sensitive_neg is deprecated use sc_sensitive << with neg() instead" );
64312027Sjungma@eit.uni-kl.de    }
64412027Sjungma@eit.uni-kl.de}
64512027Sjungma@eit.uni-kl.de
64612027Sjungma@eit.uni-kl.de// constructor
64712027Sjungma@eit.uni-kl.de
64812027Sjungma@eit.uni-kl.desc_sensitive_neg::sc_sensitive_neg( sc_module* module_ )
64912027Sjungma@eit.uni-kl.de: m_module( module_ ),
65012027Sjungma@eit.uni-kl.de  m_mode( SC_NONE_ ),
65112027Sjungma@eit.uni-kl.de  m_handle( 0 )
65212027Sjungma@eit.uni-kl.de{}
65312027Sjungma@eit.uni-kl.de
65412027Sjungma@eit.uni-kl.de
65512027Sjungma@eit.uni-kl.de// destructor
65612027Sjungma@eit.uni-kl.de
65712027Sjungma@eit.uni-kl.desc_sensitive_neg::~sc_sensitive_neg()
65812027Sjungma@eit.uni-kl.de{}
65912027Sjungma@eit.uni-kl.de
66012027Sjungma@eit.uni-kl.de
66112027Sjungma@eit.uni-kl.de// changing between process handles
66212027Sjungma@eit.uni-kl.de
66312027Sjungma@eit.uni-kl.desc_sensitive_neg&
66412027Sjungma@eit.uni-kl.desc_sensitive_neg::operator << ( sc_process_handle handle_ )
66512027Sjungma@eit.uni-kl.de{
66612027Sjungma@eit.uni-kl.de    switch ( handle_.proc_kind() )
66712027Sjungma@eit.uni-kl.de	{
66812027Sjungma@eit.uni-kl.de      case SC_CTHREAD_PROC_:
66912027Sjungma@eit.uni-kl.de      case SC_THREAD_PROC_:
67012027Sjungma@eit.uni-kl.de        m_mode = SC_THREAD_;
67112027Sjungma@eit.uni-kl.de	break;
67212027Sjungma@eit.uni-kl.de      case SC_METHOD_PROC_:
67312027Sjungma@eit.uni-kl.de	m_mode = SC_METHOD_;
67412027Sjungma@eit.uni-kl.de	break;
67512027Sjungma@eit.uni-kl.de      default:
67612027Sjungma@eit.uni-kl.de	assert(0);
67712027Sjungma@eit.uni-kl.de    }
67812027Sjungma@eit.uni-kl.de    m_handle = (sc_process_b*)handle_;
67912027Sjungma@eit.uni-kl.de    return *this;
68012027Sjungma@eit.uni-kl.de}
68112027Sjungma@eit.uni-kl.de
68212027Sjungma@eit.uni-kl.desc_sensitive_neg&
68312027Sjungma@eit.uni-kl.desc_sensitive_neg::operator << ( sc_method_handle handle_ )
68412027Sjungma@eit.uni-kl.de{
68512027Sjungma@eit.uni-kl.de    m_mode = SC_METHOD_;
68612027Sjungma@eit.uni-kl.de    m_handle = handle_;
68712027Sjungma@eit.uni-kl.de    return *this;
68812027Sjungma@eit.uni-kl.de}
68912027Sjungma@eit.uni-kl.de
69012027Sjungma@eit.uni-kl.desc_sensitive_neg&
69112027Sjungma@eit.uni-kl.desc_sensitive_neg::operator << ( sc_thread_handle handle_ )
69212027Sjungma@eit.uni-kl.de{
69312027Sjungma@eit.uni-kl.de    m_mode = SC_THREAD_;
69412027Sjungma@eit.uni-kl.de    m_handle = handle_;
69512027Sjungma@eit.uni-kl.de    return *this;
69612027Sjungma@eit.uni-kl.de}
69712027Sjungma@eit.uni-kl.de
69812027Sjungma@eit.uni-kl.de
69912027Sjungma@eit.uni-kl.desc_sensitive_neg&
70012027Sjungma@eit.uni-kl.desc_sensitive_neg::operator << ( const in_if_b_type& interface_ )
70112027Sjungma@eit.uni-kl.de{
70212027Sjungma@eit.uni-kl.de    sc_deprecated_sensitive_neg();
70312027Sjungma@eit.uni-kl.de    // check
70412027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
70512027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_NEG_, "simulation running" );
70612027Sjungma@eit.uni-kl.de    }
70712027Sjungma@eit.uni-kl.de
70812027Sjungma@eit.uni-kl.de    // make sensitive
70912027Sjungma@eit.uni-kl.de    switch( m_mode ) {
71012027Sjungma@eit.uni-kl.de    case SC_METHOD_:
71112027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
71212027Sjungma@eit.uni-kl.de	m_handle->add_static_event( interface_.negedge_event() );
71312027Sjungma@eit.uni-kl.de	break;
71412027Sjungma@eit.uni-kl.de    }
71512027Sjungma@eit.uni-kl.de    case SC_NONE_:
71612027Sjungma@eit.uni-kl.de        /* do nothing */
71712027Sjungma@eit.uni-kl.de        break;
71812027Sjungma@eit.uni-kl.de    }
71912027Sjungma@eit.uni-kl.de
72012027Sjungma@eit.uni-kl.de    return *this;
72112027Sjungma@eit.uni-kl.de}
72212027Sjungma@eit.uni-kl.de
72312027Sjungma@eit.uni-kl.desc_sensitive_neg&
72412027Sjungma@eit.uni-kl.desc_sensitive_neg::operator << ( const in_if_l_type& interface_ )
72512027Sjungma@eit.uni-kl.de{
72612027Sjungma@eit.uni-kl.de    sc_deprecated_sensitive_neg();
72712027Sjungma@eit.uni-kl.de    // check
72812027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
72912027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_NEG_, "simulation running" );
73012027Sjungma@eit.uni-kl.de    }
73112027Sjungma@eit.uni-kl.de
73212027Sjungma@eit.uni-kl.de    // make sensitive
73312027Sjungma@eit.uni-kl.de    switch( m_mode ) {
73412027Sjungma@eit.uni-kl.de    case SC_METHOD_:
73512027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
73612027Sjungma@eit.uni-kl.de	m_handle->add_static_event( interface_.negedge_event() );
73712027Sjungma@eit.uni-kl.de	break;
73812027Sjungma@eit.uni-kl.de    }
73912027Sjungma@eit.uni-kl.de    case SC_NONE_:
74012027Sjungma@eit.uni-kl.de        /* do nothing */
74112027Sjungma@eit.uni-kl.de        break;
74212027Sjungma@eit.uni-kl.de    }
74312027Sjungma@eit.uni-kl.de
74412027Sjungma@eit.uni-kl.de    return *this;
74512027Sjungma@eit.uni-kl.de}
74612027Sjungma@eit.uni-kl.de
74712027Sjungma@eit.uni-kl.desc_sensitive_neg&
74812027Sjungma@eit.uni-kl.desc_sensitive_neg::operator << ( const in_port_b_type& port_ )
74912027Sjungma@eit.uni-kl.de{
75012027Sjungma@eit.uni-kl.de    sc_deprecated_sensitive_neg();
75112027Sjungma@eit.uni-kl.de    // check
75212027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
75312027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_NEG_, "simulation running" );
75412027Sjungma@eit.uni-kl.de    }
75512027Sjungma@eit.uni-kl.de
75612027Sjungma@eit.uni-kl.de    // make sensitive
75712027Sjungma@eit.uni-kl.de    switch( m_mode ) {
75812027Sjungma@eit.uni-kl.de    case SC_METHOD_: {
75912027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_method_handle( m_handle ), &port_.neg() );
76012027Sjungma@eit.uni-kl.de	break;
76112027Sjungma@eit.uni-kl.de    }
76212027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
76312027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_thread_handle( m_handle ), &port_.neg() );
76412027Sjungma@eit.uni-kl.de	break;
76512027Sjungma@eit.uni-kl.de    }
76612027Sjungma@eit.uni-kl.de    case SC_NONE_:
76712027Sjungma@eit.uni-kl.de        /* do nothing */
76812027Sjungma@eit.uni-kl.de        break;
76912027Sjungma@eit.uni-kl.de    }
77012027Sjungma@eit.uni-kl.de
77112027Sjungma@eit.uni-kl.de    return *this;
77212027Sjungma@eit.uni-kl.de}
77312027Sjungma@eit.uni-kl.de
77412027Sjungma@eit.uni-kl.desc_sensitive_neg&
77512027Sjungma@eit.uni-kl.desc_sensitive_neg::operator << ( const in_port_l_type& port_ )
77612027Sjungma@eit.uni-kl.de{
77712027Sjungma@eit.uni-kl.de    sc_deprecated_sensitive_neg();
77812027Sjungma@eit.uni-kl.de    // check
77912027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
78012027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_NEG_, "simulation running" );
78112027Sjungma@eit.uni-kl.de    }
78212027Sjungma@eit.uni-kl.de
78312027Sjungma@eit.uni-kl.de    // make sensitive
78412027Sjungma@eit.uni-kl.de    switch( m_mode ) {
78512027Sjungma@eit.uni-kl.de    case SC_METHOD_: {
78612027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_method_handle( m_handle ), &port_.neg() );
78712027Sjungma@eit.uni-kl.de	break;
78812027Sjungma@eit.uni-kl.de    }
78912027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
79012027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_thread_handle( m_handle ), &port_.neg() );
79112027Sjungma@eit.uni-kl.de	break;
79212027Sjungma@eit.uni-kl.de    }
79312027Sjungma@eit.uni-kl.de    case SC_NONE_:
79412027Sjungma@eit.uni-kl.de        /* do nothing */
79512027Sjungma@eit.uni-kl.de        break;
79612027Sjungma@eit.uni-kl.de    }
79712027Sjungma@eit.uni-kl.de
79812027Sjungma@eit.uni-kl.de    return *this;
79912027Sjungma@eit.uni-kl.de}
80012027Sjungma@eit.uni-kl.de
80112027Sjungma@eit.uni-kl.desc_sensitive_neg&
80212027Sjungma@eit.uni-kl.desc_sensitive_neg::operator << ( const inout_port_b_type& port_ )
80312027Sjungma@eit.uni-kl.de{
80412027Sjungma@eit.uni-kl.de    sc_deprecated_sensitive_neg();
80512027Sjungma@eit.uni-kl.de    // check
80612027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
80712027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_NEG_, "simulation running" );
80812027Sjungma@eit.uni-kl.de    }
80912027Sjungma@eit.uni-kl.de
81012027Sjungma@eit.uni-kl.de    // make sensitive
81112027Sjungma@eit.uni-kl.de    switch( m_mode ) {
81212027Sjungma@eit.uni-kl.de    case SC_METHOD_: {
81312027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_method_handle( m_handle ), &port_.neg() );
81412027Sjungma@eit.uni-kl.de	break;
81512027Sjungma@eit.uni-kl.de    }
81612027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
81712027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_thread_handle( m_handle ), &port_.neg() );
81812027Sjungma@eit.uni-kl.de	break;
81912027Sjungma@eit.uni-kl.de    }
82012027Sjungma@eit.uni-kl.de    case SC_NONE_:
82112027Sjungma@eit.uni-kl.de        /* do nothing */
82212027Sjungma@eit.uni-kl.de        break;
82312027Sjungma@eit.uni-kl.de    }
82412027Sjungma@eit.uni-kl.de
82512027Sjungma@eit.uni-kl.de    return *this;
82612027Sjungma@eit.uni-kl.de}
82712027Sjungma@eit.uni-kl.de
82812027Sjungma@eit.uni-kl.desc_sensitive_neg&
82912027Sjungma@eit.uni-kl.desc_sensitive_neg::operator << ( const inout_port_l_type& port_ )
83012027Sjungma@eit.uni-kl.de{
83112027Sjungma@eit.uni-kl.de    sc_deprecated_sensitive_neg();
83212027Sjungma@eit.uni-kl.de    // check
83312027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
83412027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_MAKE_SENSITIVE_NEG_, "simulation running" );
83512027Sjungma@eit.uni-kl.de    }
83612027Sjungma@eit.uni-kl.de
83712027Sjungma@eit.uni-kl.de    // make sensitive
83812027Sjungma@eit.uni-kl.de    switch( m_mode ) {
83912027Sjungma@eit.uni-kl.de    case SC_METHOD_: {
84012027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_method_handle( m_handle ), &port_.neg() );
84112027Sjungma@eit.uni-kl.de	break;
84212027Sjungma@eit.uni-kl.de    }
84312027Sjungma@eit.uni-kl.de    case SC_THREAD_: {
84412027Sjungma@eit.uni-kl.de	port_.make_sensitive( as_thread_handle( m_handle ), &port_.neg() );
84512027Sjungma@eit.uni-kl.de	break;
84612027Sjungma@eit.uni-kl.de    }
84712027Sjungma@eit.uni-kl.de    case SC_NONE_:
84812027Sjungma@eit.uni-kl.de        /* do nothing */
84912027Sjungma@eit.uni-kl.de        break;
85012027Sjungma@eit.uni-kl.de    }
85112027Sjungma@eit.uni-kl.de
85212027Sjungma@eit.uni-kl.de    return *this;
85312027Sjungma@eit.uni-kl.de}
85412027Sjungma@eit.uni-kl.de
85512027Sjungma@eit.uni-kl.de
85612027Sjungma@eit.uni-kl.desc_sensitive_neg&
85712027Sjungma@eit.uni-kl.desc_sensitive_neg::operator () ( const in_if_b_type& interface_ )
85812027Sjungma@eit.uni-kl.de{
85912027Sjungma@eit.uni-kl.de    warn_no_parens();
86012027Sjungma@eit.uni-kl.de    return operator << ( interface_ );
86112027Sjungma@eit.uni-kl.de}
86212027Sjungma@eit.uni-kl.de
86312027Sjungma@eit.uni-kl.desc_sensitive_neg&
86412027Sjungma@eit.uni-kl.desc_sensitive_neg::operator () ( const in_if_l_type& interface_ )
86512027Sjungma@eit.uni-kl.de{
86612027Sjungma@eit.uni-kl.de    warn_no_parens();
86712027Sjungma@eit.uni-kl.de    return operator << ( interface_ );
86812027Sjungma@eit.uni-kl.de}
86912027Sjungma@eit.uni-kl.de
87012027Sjungma@eit.uni-kl.desc_sensitive_neg&
87112027Sjungma@eit.uni-kl.desc_sensitive_neg::operator () ( const in_port_b_type& port_ )
87212027Sjungma@eit.uni-kl.de{
87312027Sjungma@eit.uni-kl.de    warn_no_parens();
87412027Sjungma@eit.uni-kl.de    return operator << ( port_ );
87512027Sjungma@eit.uni-kl.de}
87612027Sjungma@eit.uni-kl.de
87712027Sjungma@eit.uni-kl.desc_sensitive_neg&
87812027Sjungma@eit.uni-kl.desc_sensitive_neg::operator () ( const in_port_l_type& port_ )
87912027Sjungma@eit.uni-kl.de{
88012027Sjungma@eit.uni-kl.de    warn_no_parens();
88112027Sjungma@eit.uni-kl.de    return operator << ( port_ );
88212027Sjungma@eit.uni-kl.de}
88312027Sjungma@eit.uni-kl.de
88412027Sjungma@eit.uni-kl.desc_sensitive_neg&
88512027Sjungma@eit.uni-kl.desc_sensitive_neg::operator () ( const inout_port_b_type& port_ )
88612027Sjungma@eit.uni-kl.de{
88712027Sjungma@eit.uni-kl.de    warn_no_parens();
88812027Sjungma@eit.uni-kl.de    return operator << ( port_ );
88912027Sjungma@eit.uni-kl.de}
89012027Sjungma@eit.uni-kl.de
89112027Sjungma@eit.uni-kl.desc_sensitive_neg&
89212027Sjungma@eit.uni-kl.desc_sensitive_neg::operator () ( const inout_port_l_type& port_ )
89312027Sjungma@eit.uni-kl.de{
89412027Sjungma@eit.uni-kl.de    warn_no_parens();
89512027Sjungma@eit.uni-kl.de    return operator << ( port_ );
89612027Sjungma@eit.uni-kl.de}
89712027Sjungma@eit.uni-kl.de
89812027Sjungma@eit.uni-kl.devoid sc_sensitive_neg::reset()
89912027Sjungma@eit.uni-kl.de{
90012027Sjungma@eit.uni-kl.de    m_mode = SC_NONE_;
90112027Sjungma@eit.uni-kl.de}
90212027Sjungma@eit.uni-kl.de
90312027Sjungma@eit.uni-kl.de} // namespace sc_core
90412027Sjungma@eit.uni-kl.de
90512027Sjungma@eit.uni-kl.de/*****************************************************************************
90612027Sjungma@eit.uni-kl.de
90712027Sjungma@eit.uni-kl.de  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
90812027Sjungma@eit.uni-kl.de  changes you are making here.
90912027Sjungma@eit.uni-kl.de
91012027Sjungma@eit.uni-kl.de      Name, Affiliation, Date: Bishnupriya Bhattacharya, Cadence Design Systems,
91112027Sjungma@eit.uni-kl.de                               25 August, 2003
91212027Sjungma@eit.uni-kl.de  Description of Modification: add make_static_sensitivity() routines to support
91312027Sjungma@eit.uni-kl.de                               dynamic method process creation with static
91412027Sjungma@eit.uni-kl.de                               sensitivity
91512027Sjungma@eit.uni-kl.de
91612027Sjungma@eit.uni-kl.de *****************************************************************************/
91712027Sjungma@eit.uni-kl.de
91812027Sjungma@eit.uni-kl.de// $Log: sc_sensitive.cpp,v $
91912027Sjungma@eit.uni-kl.de// Revision 1.5  2011/08/26 20:46:10  acg
92012027Sjungma@eit.uni-kl.de//  Andy Goodrich: moved the modification log to the end of the file to
92112027Sjungma@eit.uni-kl.de//  eliminate source line number skew when check-ins are done.
92212027Sjungma@eit.uni-kl.de//
92312027Sjungma@eit.uni-kl.de// Revision 1.4  2011/02/18 20:27:14  acg
92412027Sjungma@eit.uni-kl.de//  Andy Goodrich: Updated Copyrights.
92512027Sjungma@eit.uni-kl.de//
92612027Sjungma@eit.uni-kl.de// Revision 1.3  2011/02/13 21:47:38  acg
92712027Sjungma@eit.uni-kl.de//  Andy Goodrich: update copyright notice.
92812027Sjungma@eit.uni-kl.de//
92912027Sjungma@eit.uni-kl.de// Revision 1.2  2008/05/22 17:06:26  acg
93012027Sjungma@eit.uni-kl.de//  Andy Goodrich: updated copyright notice to include 2008.
93112027Sjungma@eit.uni-kl.de//
93212027Sjungma@eit.uni-kl.de// Revision 1.1.1.1  2006/12/15 20:20:05  acg
93312027Sjungma@eit.uni-kl.de// SystemC 2.3
93412027Sjungma@eit.uni-kl.de//
93512027Sjungma@eit.uni-kl.de// Revision 1.8  2006/04/11 23:13:21  acg
93612027Sjungma@eit.uni-kl.de//   Andy Goodrich: Changes for reduced reset support that only includes
93712027Sjungma@eit.uni-kl.de//   sc_cthread, but has preliminary hooks for expanding to method and thread
93812027Sjungma@eit.uni-kl.de//   processes also.
93912027Sjungma@eit.uni-kl.de//
94012027Sjungma@eit.uni-kl.de// Revision 1.7  2006/01/27 17:31:24  acg
94112027Sjungma@eit.uni-kl.de//  Andy Goodrich: removed debugging comments from << operator code for types
94212027Sjungma@eit.uni-kl.de//  that are deprecated.
94312027Sjungma@eit.uni-kl.de//
94412027Sjungma@eit.uni-kl.de// Revision 1.6  2006/01/26 21:04:54  acg
94512027Sjungma@eit.uni-kl.de//  Andy Goodrich: deprecation message changes and additional messages.
94612027Sjungma@eit.uni-kl.de//
94712027Sjungma@eit.uni-kl.de// Revision 1.5  2006/01/25 00:31:19  acg
94812027Sjungma@eit.uni-kl.de//  Andy Goodrich: Changed over to use a standard message id of
94912027Sjungma@eit.uni-kl.de//  SC_ID_IEEE_1666_DEPRECATION for all deprecation messages.
95012027Sjungma@eit.uni-kl.de//
95112027Sjungma@eit.uni-kl.de// Revision 1.4  2006/01/24 20:49:05  acg
95212027Sjungma@eit.uni-kl.de// Andy Goodrich: changes to remove the use of deprecated features within the
95312027Sjungma@eit.uni-kl.de// simulator, and to issue warning messages when deprecated features are used.
95412027Sjungma@eit.uni-kl.de//
95512027Sjungma@eit.uni-kl.de// Revision 1.3  2006/01/13 18:44:30  acg
95612027Sjungma@eit.uni-kl.de// Added $Log to record CVS changes into the source.
95712027Sjungma@eit.uni-kl.de//
95812027Sjungma@eit.uni-kl.de
95912027Sjungma@eit.uni-kl.de// Taf!
960