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_prim_channel.cpp -- Abstract base class of all primitive channel
2312027Sjungma@eit.uni-kl.de                         classes.
2412027Sjungma@eit.uni-kl.de
2512027Sjungma@eit.uni-kl.de  Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21
2612027Sjungma@eit.uni-kl.de
2712027Sjungma@eit.uni-kl.de  CHANGE LOG IS AT THE END OF THE FILE
2812027Sjungma@eit.uni-kl.de *****************************************************************************/
2912027Sjungma@eit.uni-kl.de
3012027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_prim_channel.h"
3112027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_communication_ids.h"
3212027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_simcontext.h"
3312027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_module.h"
3412027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_object_int.h"
3512027Sjungma@eit.uni-kl.de
3612027Sjungma@eit.uni-kl.de#ifndef SC_DISABLE_ASYNC_UPDATES
3712027Sjungma@eit.uni-kl.de#  include "sysc/communication/sc_host_mutex.h"
3812027Sjungma@eit.uni-kl.de#endif
3912027Sjungma@eit.uni-kl.de
4012027Sjungma@eit.uni-kl.denamespace sc_core {
4112027Sjungma@eit.uni-kl.de
4212027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
4312027Sjungma@eit.uni-kl.de//  CLASS : sc_prim_channel
4412027Sjungma@eit.uni-kl.de//
4512027Sjungma@eit.uni-kl.de//  Abstract base class of all primitive channel classes.
4612027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
4712027Sjungma@eit.uni-kl.de
4812027Sjungma@eit.uni-kl.de// constructors
4912027Sjungma@eit.uni-kl.de
5012027Sjungma@eit.uni-kl.desc_prim_channel::sc_prim_channel()
5112027Sjungma@eit.uni-kl.de: sc_object( 0 ),
5212027Sjungma@eit.uni-kl.de  m_registry( simcontext()->get_prim_channel_registry() ),
5312027Sjungma@eit.uni-kl.de  m_update_next_p( 0 )
5412027Sjungma@eit.uni-kl.de{
5512027Sjungma@eit.uni-kl.de    m_registry->insert( *this );
5612027Sjungma@eit.uni-kl.de}
5712027Sjungma@eit.uni-kl.de
5812027Sjungma@eit.uni-kl.desc_prim_channel::sc_prim_channel( const char* name_ )
5912027Sjungma@eit.uni-kl.de: sc_object( name_ ),
6012027Sjungma@eit.uni-kl.de  m_registry( simcontext()->get_prim_channel_registry() ),
6112027Sjungma@eit.uni-kl.de  m_update_next_p( 0 )
6212027Sjungma@eit.uni-kl.de{
6312027Sjungma@eit.uni-kl.de    m_registry->insert( *this );
6412027Sjungma@eit.uni-kl.de}
6512027Sjungma@eit.uni-kl.de
6612027Sjungma@eit.uni-kl.de
6712027Sjungma@eit.uni-kl.de// destructor
6812027Sjungma@eit.uni-kl.de
6912027Sjungma@eit.uni-kl.desc_prim_channel::~sc_prim_channel()
7012027Sjungma@eit.uni-kl.de{
7112027Sjungma@eit.uni-kl.de    m_registry->remove( *this );
7212027Sjungma@eit.uni-kl.de}
7312027Sjungma@eit.uni-kl.de
7412027Sjungma@eit.uni-kl.de
7512027Sjungma@eit.uni-kl.de// the update method (does nothing by default)
7612027Sjungma@eit.uni-kl.de
7712027Sjungma@eit.uni-kl.devoid
7812027Sjungma@eit.uni-kl.desc_prim_channel::update()
7912027Sjungma@eit.uni-kl.de{}
8012027Sjungma@eit.uni-kl.de
8112027Sjungma@eit.uni-kl.de
8212027Sjungma@eit.uni-kl.de// called by construction_done (does nothing by default)
8312027Sjungma@eit.uni-kl.de
8412027Sjungma@eit.uni-kl.devoid sc_prim_channel::before_end_of_elaboration()
8512027Sjungma@eit.uni-kl.de{}
8612027Sjungma@eit.uni-kl.de
8712027Sjungma@eit.uni-kl.de// called when construction is done
8812027Sjungma@eit.uni-kl.de
8912027Sjungma@eit.uni-kl.devoid
9012027Sjungma@eit.uni-kl.desc_prim_channel::construction_done()
9112027Sjungma@eit.uni-kl.de{
9212027Sjungma@eit.uni-kl.de    sc_object::hierarchy_scope scope( get_parent_object() );
9312027Sjungma@eit.uni-kl.de    before_end_of_elaboration();
9412027Sjungma@eit.uni-kl.de}
9512027Sjungma@eit.uni-kl.de
9612027Sjungma@eit.uni-kl.de// called by elaboration_done (does nothing by default)
9712027Sjungma@eit.uni-kl.de
9812027Sjungma@eit.uni-kl.devoid
9912027Sjungma@eit.uni-kl.desc_prim_channel::end_of_elaboration()
10012027Sjungma@eit.uni-kl.de{}
10112027Sjungma@eit.uni-kl.de
10212027Sjungma@eit.uni-kl.de
10312027Sjungma@eit.uni-kl.de// called when elaboration is done
10412027Sjungma@eit.uni-kl.de
10512027Sjungma@eit.uni-kl.devoid
10612027Sjungma@eit.uni-kl.desc_prim_channel::elaboration_done()
10712027Sjungma@eit.uni-kl.de{
10812027Sjungma@eit.uni-kl.de    sc_object::hierarchy_scope scope( get_parent_object() );
10912027Sjungma@eit.uni-kl.de    end_of_elaboration();
11012027Sjungma@eit.uni-kl.de}
11112027Sjungma@eit.uni-kl.de
11212027Sjungma@eit.uni-kl.de// called by start_simulation (does nothing)
11312027Sjungma@eit.uni-kl.de
11412027Sjungma@eit.uni-kl.devoid
11512027Sjungma@eit.uni-kl.desc_prim_channel::start_of_simulation()
11612027Sjungma@eit.uni-kl.de{}
11712027Sjungma@eit.uni-kl.de
11812027Sjungma@eit.uni-kl.de// called before simulation begins
11912027Sjungma@eit.uni-kl.de
12012027Sjungma@eit.uni-kl.devoid
12112027Sjungma@eit.uni-kl.desc_prim_channel::start_simulation()
12212027Sjungma@eit.uni-kl.de{
12312027Sjungma@eit.uni-kl.de    sc_object::hierarchy_scope scope( get_parent_object() );
12412027Sjungma@eit.uni-kl.de    start_of_simulation();
12512027Sjungma@eit.uni-kl.de}
12612027Sjungma@eit.uni-kl.de
12712027Sjungma@eit.uni-kl.de// called by simulation_done (does nothing)
12812027Sjungma@eit.uni-kl.de
12912027Sjungma@eit.uni-kl.devoid
13012027Sjungma@eit.uni-kl.desc_prim_channel::end_of_simulation()
13112027Sjungma@eit.uni-kl.de{}
13212027Sjungma@eit.uni-kl.de
13312027Sjungma@eit.uni-kl.de// called after simulation ends
13412027Sjungma@eit.uni-kl.de
13512027Sjungma@eit.uni-kl.devoid
13612027Sjungma@eit.uni-kl.desc_prim_channel::simulation_done()
13712027Sjungma@eit.uni-kl.de{
13812027Sjungma@eit.uni-kl.de    sc_object::hierarchy_scope scope( get_parent_object() );
13912027Sjungma@eit.uni-kl.de    end_of_simulation();
14012027Sjungma@eit.uni-kl.de}
14112027Sjungma@eit.uni-kl.de
14212027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
14312027Sjungma@eit.uni-kl.de//  CLASS : sc_prim_channel_registry::async_update_list
14412027Sjungma@eit.uni-kl.de//
14512027Sjungma@eit.uni-kl.de//  Thread-safe list of pending external updates
14612027Sjungma@eit.uni-kl.de//  FOR INTERNAL USE ONLY!
14712027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
14812027Sjungma@eit.uni-kl.de
14912027Sjungma@eit.uni-kl.declass sc_prim_channel_registry::async_update_list
15012027Sjungma@eit.uni-kl.de{
15112027Sjungma@eit.uni-kl.de#ifndef SC_DISABLE_ASYNC_UPDATES
15212027Sjungma@eit.uni-kl.depublic:
15312027Sjungma@eit.uni-kl.de
15412027Sjungma@eit.uni-kl.de    bool pending() const
15512027Sjungma@eit.uni-kl.de    {
15612027Sjungma@eit.uni-kl.de	return m_push_queue.size() != 0;
15712027Sjungma@eit.uni-kl.de    }
15812027Sjungma@eit.uni-kl.de
15912027Sjungma@eit.uni-kl.de    void append( sc_prim_channel& prim_channel_ )
16012027Sjungma@eit.uni-kl.de    {
16112027Sjungma@eit.uni-kl.de	sc_scoped_lock lock( m_mutex );
16212027Sjungma@eit.uni-kl.de	m_push_queue.push_back( &prim_channel_ );
16312027Sjungma@eit.uni-kl.de	// return releases the mutex
16412027Sjungma@eit.uni-kl.de    }
16512027Sjungma@eit.uni-kl.de
16612027Sjungma@eit.uni-kl.de    void accept_updates()
16712027Sjungma@eit.uni-kl.de    {
16812027Sjungma@eit.uni-kl.de	sc_assert( ! m_pop_queue.size() );
16912027Sjungma@eit.uni-kl.de	{
17012027Sjungma@eit.uni-kl.de	    sc_scoped_lock lock( m_mutex );
17112027Sjungma@eit.uni-kl.de	    m_push_queue.swap( m_pop_queue );
17212027Sjungma@eit.uni-kl.de	    // leaving the block releases the mutex
17312027Sjungma@eit.uni-kl.de	}
17412027Sjungma@eit.uni-kl.de
17512027Sjungma@eit.uni-kl.de	std::vector< sc_prim_channel* >::const_iterator
17612027Sjungma@eit.uni-kl.de	    it = m_pop_queue.begin(), end = m_pop_queue.end();
17712027Sjungma@eit.uni-kl.de	while( it!= end )
17812027Sjungma@eit.uni-kl.de	{
17912027Sjungma@eit.uni-kl.de	    // we use request_update instead of perform_update
18012027Sjungma@eit.uni-kl.de	    // to skip duplicates
18112027Sjungma@eit.uni-kl.de	    (*it++)->request_update();
18212027Sjungma@eit.uni-kl.de	}
18312027Sjungma@eit.uni-kl.de	m_pop_queue.clear();
18412027Sjungma@eit.uni-kl.de    }
18512027Sjungma@eit.uni-kl.de
18612027Sjungma@eit.uni-kl.deprivate:
18712027Sjungma@eit.uni-kl.de    sc_host_mutex                   m_mutex;
18812027Sjungma@eit.uni-kl.de    std::vector< sc_prim_channel* > m_push_queue;
18912027Sjungma@eit.uni-kl.de    std::vector< sc_prim_channel* > m_pop_queue;
19012027Sjungma@eit.uni-kl.de
19112027Sjungma@eit.uni-kl.de#endif // ! SC_DISABLE_ASYNC_UPDATES
19212027Sjungma@eit.uni-kl.de};
19312027Sjungma@eit.uni-kl.de
19412027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
19512027Sjungma@eit.uni-kl.de//  CLASS : sc_prim_channel_registry
19612027Sjungma@eit.uni-kl.de//
19712027Sjungma@eit.uni-kl.de//  Registry for all primitive channels.
19812027Sjungma@eit.uni-kl.de//  FOR INTERNAL USE ONLY!
19912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
20012027Sjungma@eit.uni-kl.de
20112027Sjungma@eit.uni-kl.devoid
20212027Sjungma@eit.uni-kl.desc_prim_channel_registry::insert( sc_prim_channel& prim_channel_ )
20312027Sjungma@eit.uni-kl.de{
20412027Sjungma@eit.uni-kl.de    if( sc_is_running() ) {
20512027Sjungma@eit.uni-kl.de       SC_REPORT_ERROR( SC_ID_INSERT_PRIM_CHANNEL_, "simulation running" );
20612027Sjungma@eit.uni-kl.de    }
20712027Sjungma@eit.uni-kl.de
20812027Sjungma@eit.uni-kl.de    if( m_simc->elaboration_done() ) {
20912027Sjungma@eit.uni-kl.de
21012027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_INSERT_PRIM_CHANNEL_, "elaboration done" );
21112027Sjungma@eit.uni-kl.de    }
21212027Sjungma@eit.uni-kl.de
21312027Sjungma@eit.uni-kl.de#ifdef DEBUG_SYSTEMC
21412027Sjungma@eit.uni-kl.de    // check if prim_channel_ is already inserted
21512027Sjungma@eit.uni-kl.de    for( int i = 0; i < size(); ++ i ) {
21612027Sjungma@eit.uni-kl.de	if( &prim_channel_ == m_prim_channel_vec[i] ) {
21712027Sjungma@eit.uni-kl.de	    SC_REPORT_ERROR( SC_ID_INSERT_PRIM_CHANNEL_, "already inserted" );
21812027Sjungma@eit.uni-kl.de	}
21912027Sjungma@eit.uni-kl.de    }
22012027Sjungma@eit.uni-kl.de#endif
22112027Sjungma@eit.uni-kl.de
22212027Sjungma@eit.uni-kl.de    // insert
22312027Sjungma@eit.uni-kl.de    m_prim_channel_vec.push_back( &prim_channel_ );
22412027Sjungma@eit.uni-kl.de
22512027Sjungma@eit.uni-kl.de}
22612027Sjungma@eit.uni-kl.de
22712027Sjungma@eit.uni-kl.devoid
22812027Sjungma@eit.uni-kl.desc_prim_channel_registry::remove( sc_prim_channel& prim_channel_ )
22912027Sjungma@eit.uni-kl.de{
23012027Sjungma@eit.uni-kl.de    int i;
23112027Sjungma@eit.uni-kl.de    for( i = 0; i < size(); ++ i ) {
23212027Sjungma@eit.uni-kl.de	if( &prim_channel_ == m_prim_channel_vec[i] ) {
23312027Sjungma@eit.uni-kl.de	    break;
23412027Sjungma@eit.uni-kl.de	}
23512027Sjungma@eit.uni-kl.de    }
23612027Sjungma@eit.uni-kl.de    if( i == size() ) {
23712027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_REMOVE_PRIM_CHANNEL_, 0 );
23812027Sjungma@eit.uni-kl.de    }
23912027Sjungma@eit.uni-kl.de
24012027Sjungma@eit.uni-kl.de    // remove
24112027Sjungma@eit.uni-kl.de    m_prim_channel_vec[i] = m_prim_channel_vec[size() - 1];
24212027Sjungma@eit.uni-kl.de    m_prim_channel_vec.resize(size()-1);
24312027Sjungma@eit.uni-kl.de}
24412027Sjungma@eit.uni-kl.de
24512027Sjungma@eit.uni-kl.debool
24612027Sjungma@eit.uni-kl.desc_prim_channel_registry::pending_async_updates() const
24712027Sjungma@eit.uni-kl.de{
24812027Sjungma@eit.uni-kl.de#ifndef SC_DISABLE_ASYNC_UPDATES
24912027Sjungma@eit.uni-kl.de    return m_async_update_list_p->pending();
25012027Sjungma@eit.uni-kl.de#else
25112027Sjungma@eit.uni-kl.de    return false;
25212027Sjungma@eit.uni-kl.de#endif
25312027Sjungma@eit.uni-kl.de}
25412027Sjungma@eit.uni-kl.de
25512027Sjungma@eit.uni-kl.devoid
25612027Sjungma@eit.uni-kl.desc_prim_channel_registry::async_request_update( sc_prim_channel& prim_channel_ )
25712027Sjungma@eit.uni-kl.de{
25812027Sjungma@eit.uni-kl.de#ifndef SC_DISABLE_ASYNC_UPDATES
25912027Sjungma@eit.uni-kl.de    m_async_update_list_p->append( prim_channel_ );
26012027Sjungma@eit.uni-kl.de#else
26112027Sjungma@eit.uni-kl.de    SC_REPORT_ERROR( SC_ID_NO_ASYNC_UPDATE_, prim_channel_.name() );
26212027Sjungma@eit.uni-kl.de#endif
26312027Sjungma@eit.uni-kl.de}
26412027Sjungma@eit.uni-kl.de
26512027Sjungma@eit.uni-kl.de// +----------------------------------------------------------------------------
26612027Sjungma@eit.uni-kl.de// |"sc_prim_channel_registry::perform_update"
26712027Sjungma@eit.uni-kl.de// |
26812027Sjungma@eit.uni-kl.de// | This method updates the values of the primitive channels in its update
26912027Sjungma@eit.uni-kl.de// | lists.
27012027Sjungma@eit.uni-kl.de// +----------------------------------------------------------------------------
27112027Sjungma@eit.uni-kl.devoid
27212027Sjungma@eit.uni-kl.desc_prim_channel_registry::perform_update()
27312027Sjungma@eit.uni-kl.de{
27412027Sjungma@eit.uni-kl.de    // Update the values for the primitive channels set external to the
27512027Sjungma@eit.uni-kl.de    // simulator.
27612027Sjungma@eit.uni-kl.de
27712027Sjungma@eit.uni-kl.de#ifndef SC_DISABLE_ASYNC_UPDATES
27812027Sjungma@eit.uni-kl.de    if( m_async_update_list_p->pending() )
27912027Sjungma@eit.uni-kl.de	m_async_update_list_p->accept_updates();
28012027Sjungma@eit.uni-kl.de#endif
28112027Sjungma@eit.uni-kl.de
28212027Sjungma@eit.uni-kl.de    sc_prim_channel* next_p; // Next update to perform.
28312027Sjungma@eit.uni-kl.de    sc_prim_channel* now_p;  // Update now performing.
28412027Sjungma@eit.uni-kl.de
28512027Sjungma@eit.uni-kl.de    // Update the values for the primitive channels in the simulator's list.
28612027Sjungma@eit.uni-kl.de
28712027Sjungma@eit.uni-kl.de    now_p = m_update_list_p;
28812027Sjungma@eit.uni-kl.de    m_update_list_p = (sc_prim_channel*)sc_prim_channel::list_end;
28912027Sjungma@eit.uni-kl.de    for ( ; now_p != (sc_prim_channel*)sc_prim_channel::list_end;
29012027Sjungma@eit.uni-kl.de	now_p = next_p )
29112027Sjungma@eit.uni-kl.de    {
29212027Sjungma@eit.uni-kl.de	next_p = now_p->m_update_next_p;
29312027Sjungma@eit.uni-kl.de	now_p->perform_update();
29412027Sjungma@eit.uni-kl.de    }
29512027Sjungma@eit.uni-kl.de}
29612027Sjungma@eit.uni-kl.de
29712027Sjungma@eit.uni-kl.de// constructor
29812027Sjungma@eit.uni-kl.de
29912027Sjungma@eit.uni-kl.desc_prim_channel_registry::sc_prim_channel_registry( sc_simcontext& simc_ )
30012027Sjungma@eit.uni-kl.de  :  m_async_update_list_p(0)
30112027Sjungma@eit.uni-kl.de  ,  m_construction_done(0)
30212027Sjungma@eit.uni-kl.de  ,  m_prim_channel_vec()
30312027Sjungma@eit.uni-kl.de  ,  m_simc( &simc_ )
30412027Sjungma@eit.uni-kl.de  ,  m_update_list_p((sc_prim_channel*)sc_prim_channel::list_end)
30512027Sjungma@eit.uni-kl.de{
30612027Sjungma@eit.uni-kl.de#   ifndef SC_DISABLE_ASYNC_UPDATES
30712027Sjungma@eit.uni-kl.de        m_async_update_list_p = new async_update_list();
30812027Sjungma@eit.uni-kl.de#   endif
30912027Sjungma@eit.uni-kl.de}
31012027Sjungma@eit.uni-kl.de
31112027Sjungma@eit.uni-kl.de
31212027Sjungma@eit.uni-kl.de// destructor
31312027Sjungma@eit.uni-kl.de
31412027Sjungma@eit.uni-kl.desc_prim_channel_registry::~sc_prim_channel_registry()
31512027Sjungma@eit.uni-kl.de{
31612027Sjungma@eit.uni-kl.de    delete m_async_update_list_p;
31712027Sjungma@eit.uni-kl.de}
31812027Sjungma@eit.uni-kl.de
31912027Sjungma@eit.uni-kl.de// called when construction is done
32012027Sjungma@eit.uni-kl.de
32112027Sjungma@eit.uni-kl.debool
32212027Sjungma@eit.uni-kl.desc_prim_channel_registry::construction_done()
32312027Sjungma@eit.uni-kl.de{
32412027Sjungma@eit.uni-kl.de    if( size() == m_construction_done )
32512027Sjungma@eit.uni-kl.de        // nothing has been updated
32612027Sjungma@eit.uni-kl.de        return true;
32712027Sjungma@eit.uni-kl.de
32812027Sjungma@eit.uni-kl.de    for( ; m_construction_done < size(); ++m_construction_done ) {
32912027Sjungma@eit.uni-kl.de        m_prim_channel_vec[m_construction_done]->construction_done();
33012027Sjungma@eit.uni-kl.de    }
33112027Sjungma@eit.uni-kl.de
33212027Sjungma@eit.uni-kl.de    return false;
33312027Sjungma@eit.uni-kl.de}
33412027Sjungma@eit.uni-kl.de
33512027Sjungma@eit.uni-kl.de
33612027Sjungma@eit.uni-kl.de// called when elaboration is done
33712027Sjungma@eit.uni-kl.de
33812027Sjungma@eit.uni-kl.devoid
33912027Sjungma@eit.uni-kl.desc_prim_channel_registry::elaboration_done()
34012027Sjungma@eit.uni-kl.de{
34112027Sjungma@eit.uni-kl.de    for( int i = 0; i < size(); ++ i ) {
34212027Sjungma@eit.uni-kl.de	m_prim_channel_vec[i]->elaboration_done();
34312027Sjungma@eit.uni-kl.de    }
34412027Sjungma@eit.uni-kl.de}
34512027Sjungma@eit.uni-kl.de
34612027Sjungma@eit.uni-kl.de// called before simulation begins
34712027Sjungma@eit.uni-kl.de
34812027Sjungma@eit.uni-kl.devoid
34912027Sjungma@eit.uni-kl.desc_prim_channel_registry::start_simulation()
35012027Sjungma@eit.uni-kl.de{
35112027Sjungma@eit.uni-kl.de    for( int i = 0; i < size(); ++ i ) {
35212027Sjungma@eit.uni-kl.de	m_prim_channel_vec[i]->start_simulation();
35312027Sjungma@eit.uni-kl.de    }
35412027Sjungma@eit.uni-kl.de}
35512027Sjungma@eit.uni-kl.de
35612027Sjungma@eit.uni-kl.de// called after simulation ends
35712027Sjungma@eit.uni-kl.de
35812027Sjungma@eit.uni-kl.devoid
35912027Sjungma@eit.uni-kl.desc_prim_channel_registry::simulation_done()
36012027Sjungma@eit.uni-kl.de{
36112027Sjungma@eit.uni-kl.de    for( int i = 0; i < size(); ++ i ) {
36212027Sjungma@eit.uni-kl.de	m_prim_channel_vec[i]->simulation_done();
36312027Sjungma@eit.uni-kl.de    }
36412027Sjungma@eit.uni-kl.de}
36512027Sjungma@eit.uni-kl.de
36612027Sjungma@eit.uni-kl.de} // namespace sc_core
36712027Sjungma@eit.uni-kl.de
36812027Sjungma@eit.uni-kl.de/*****************************************************************************
36912027Sjungma@eit.uni-kl.de
37012027Sjungma@eit.uni-kl.de  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
37112027Sjungma@eit.uni-kl.de  changes you are making here.
37212027Sjungma@eit.uni-kl.de
37312027Sjungma@eit.uni-kl.de      Name, Affiliation, Date: Andy Goodrich, Forte,
37412027Sjungma@eit.uni-kl.de                               Bishnupriya Bhattacharya, Cadence Design Systems,
37512027Sjungma@eit.uni-kl.de                               25 August, 2003
37612027Sjungma@eit.uni-kl.de
37712027Sjungma@eit.uni-kl.de  Description of Modification: phase callbacks
37812027Sjungma@eit.uni-kl.de
37912027Sjungma@eit.uni-kl.de *****************************************************************************/
38012027Sjungma@eit.uni-kl.de
38112027Sjungma@eit.uni-kl.de
38212027Sjungma@eit.uni-kl.de// $Log: sc_prim_channel.cpp,v $
38312027Sjungma@eit.uni-kl.de// Revision 1.11  2011/08/26 21:38:32  acg
38412027Sjungma@eit.uni-kl.de//  Philipp A. Hartmann: removed unused switch m_construction_done.
38512027Sjungma@eit.uni-kl.de//
38612027Sjungma@eit.uni-kl.de// Revision 1.10  2011/08/26 20:45:41  acg
38712027Sjungma@eit.uni-kl.de//  Andy Goodrich: moved the modification log to the end of the file to
38812027Sjungma@eit.uni-kl.de//  eliminate source line number skew when check-ins are done.
38912027Sjungma@eit.uni-kl.de//
39012027Sjungma@eit.uni-kl.de// Revision 1.9  2011/08/24 22:05:36  acg
39112027Sjungma@eit.uni-kl.de//  Torsten Maehne: initialization changes to remove warnings.
39212027Sjungma@eit.uni-kl.de//
39312027Sjungma@eit.uni-kl.de// Revision 1.8  2011/05/09 04:07:37  acg
39412027Sjungma@eit.uni-kl.de//  Philipp A. Hartmann:
39512027Sjungma@eit.uni-kl.de//    (1) Restore hierarchy in all phase callbacks.
39612027Sjungma@eit.uni-kl.de//    (2) Ensure calls to before_end_of_elaboration.
39712027Sjungma@eit.uni-kl.de//
39812027Sjungma@eit.uni-kl.de// Revision 1.7  2011/04/19 02:36:26  acg
39912027Sjungma@eit.uni-kl.de//  Philipp A. Hartmann: new aysnc_update and mutex support.
40012027Sjungma@eit.uni-kl.de//
40112027Sjungma@eit.uni-kl.de// Revision 1.6  2011/02/18 20:31:05  acg
40212027Sjungma@eit.uni-kl.de//  Philipp A. Hartmann: added error messages for calls that cannot be done
40312027Sjungma@eit.uni-kl.de//  after elaboration.
40412027Sjungma@eit.uni-kl.de//
40512027Sjungma@eit.uni-kl.de// Revision 1.5  2011/02/18 20:23:45  acg
40612027Sjungma@eit.uni-kl.de//  Andy Goodrich: Copyright update.
40712027Sjungma@eit.uni-kl.de//
40812027Sjungma@eit.uni-kl.de// Revision 1.4  2011/02/14 17:50:16  acg
40912027Sjungma@eit.uni-kl.de//  Andy Goodrich: testing for sc_port and sc_export instantiations during
41012027Sjungma@eit.uni-kl.de//  end of elaboration and issuing appropriate error messages.
41112027Sjungma@eit.uni-kl.de//
41212027Sjungma@eit.uni-kl.de// Revision 1.3  2010/12/07 20:36:49  acg
41312027Sjungma@eit.uni-kl.de//  Andy Goodrich: fix pointer that should have been initialized to zero.
41412027Sjungma@eit.uni-kl.de//
41512027Sjungma@eit.uni-kl.de// Revision 1.2  2010/12/07 19:50:36  acg
41612027Sjungma@eit.uni-kl.de//  Andy Goodrich: addition of writer policies, courtesy of Philipp Hartmann.
41712027Sjungma@eit.uni-kl.de//
41812027Sjungma@eit.uni-kl.de// Revision 1.1.1.1  2006/12/15 20:20:04  acg
41912027Sjungma@eit.uni-kl.de// SystemC 2.3
42012027Sjungma@eit.uni-kl.de//
42112027Sjungma@eit.uni-kl.de// Revision 1.4  2006/01/26 21:00:50  acg
42212027Sjungma@eit.uni-kl.de//  Andy Goodrich: conversion to use sc_event::notify(SC_ZERO_TIME) instead of
42312027Sjungma@eit.uni-kl.de//  sc_event::notify_delayed()
42412027Sjungma@eit.uni-kl.de//
42512027Sjungma@eit.uni-kl.de// Revision 1.3  2006/01/13 18:47:42  acg
42612027Sjungma@eit.uni-kl.de// Added $Log command so that CVS comments are reproduced in the source.
42712027Sjungma@eit.uni-kl.de//
42812027Sjungma@eit.uni-kl.de
42912027Sjungma@eit.uni-kl.de// Taf!
430