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