112855Sgabeblack@google.com/*****************************************************************************
212855Sgabeblack@google.com
312855Sgabeblack@google.com  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412855Sgabeblack@google.com  more contributor license agreements.  See the NOTICE file distributed
512855Sgabeblack@google.com  with this work for additional information regarding copyright ownership.
612855Sgabeblack@google.com  Accellera licenses this file to you under the Apache License, Version 2.0
712855Sgabeblack@google.com  (the "License"); you may not use this file except in compliance with the
812855Sgabeblack@google.com  License.  You may obtain a copy of the License at
912855Sgabeblack@google.com
1012855Sgabeblack@google.com    http://www.apache.org/licenses/LICENSE-2.0
1112855Sgabeblack@google.com
1212855Sgabeblack@google.com  Unless required by applicable law or agreed to in writing, software
1312855Sgabeblack@google.com  distributed under the License is distributed on an "AS IS" BASIS,
1412855Sgabeblack@google.com  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512855Sgabeblack@google.com  implied.  See the License for the specific language governing
1612855Sgabeblack@google.com  permissions and limitations under the License.
1712855Sgabeblack@google.com
1812855Sgabeblack@google.com *****************************************************************************/
1912855Sgabeblack@google.com
2012855Sgabeblack@google.com/*****************************************************************************
2112855Sgabeblack@google.com
2212855Sgabeblack@google.com  test01.cpp --
2312855Sgabeblack@google.com
2412855Sgabeblack@google.com  Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15
2512855Sgabeblack@google.com
2612855Sgabeblack@google.com *****************************************************************************/
2712855Sgabeblack@google.com
2812855Sgabeblack@google.com/*****************************************************************************
2912855Sgabeblack@google.com
3012855Sgabeblack@google.com  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
3112855Sgabeblack@google.com  changes you are making here.
3212855Sgabeblack@google.com
3312855Sgabeblack@google.com      Name, Affiliation, Date:
3412855Sgabeblack@google.com  Description of Modification:
3512855Sgabeblack@google.com
3612855Sgabeblack@google.com *****************************************************************************/
3712855Sgabeblack@google.com
3812855Sgabeblack@google.com// test of positional binding
3912855Sgabeblack@google.com
4012855Sgabeblack@google.com#include "systemc.h"
4112855Sgabeblack@google.com
4212855Sgabeblack@google.comtemplate <class T>
4312855Sgabeblack@google.comSC_MODULE( prim_source )
4412855Sgabeblack@google.com{
4512855Sgabeblack@google.com    sc_out<T>                     out;
4612855Sgabeblack@google.com    sc_port<sc_signal_out_if<T> > port_out;
4712855Sgabeblack@google.com
4812855Sgabeblack@google.com    SC_CTOR( prim_source ) {}
4912855Sgabeblack@google.com};
5012855Sgabeblack@google.com
5112855Sgabeblack@google.comtemplate <class T>
5212855Sgabeblack@google.comSC_MODULE( prim_transfer )
5312855Sgabeblack@google.com{
5412855Sgabeblack@google.com    sc_in<T>                      in;
5512855Sgabeblack@google.com    sc_port<sc_signal_in_if<T> >  port_in;
5612855Sgabeblack@google.com    sc_out<T>                     out;
5712855Sgabeblack@google.com    sc_port<sc_signal_out_if<T> > port_out;
5812855Sgabeblack@google.com
5912855Sgabeblack@google.com
6012855Sgabeblack@google.com    SC_CTOR( prim_transfer ) {}
6112855Sgabeblack@google.com};
6212855Sgabeblack@google.com
6312855Sgabeblack@google.comtemplate <class T>
6412855Sgabeblack@google.comSC_MODULE( prim_sink )
6512855Sgabeblack@google.com{
6612855Sgabeblack@google.com    sc_in<T>                     in;
6712855Sgabeblack@google.com    sc_port<sc_signal_in_if<T> > port_in;
6812855Sgabeblack@google.com
6912855Sgabeblack@google.com    SC_CTOR( prim_sink ) {}
7012855Sgabeblack@google.com};
7112855Sgabeblack@google.com
7212855Sgabeblack@google.comtemplate <class T>
7312855Sgabeblack@google.comSC_MODULE( hier_source )
7412855Sgabeblack@google.com{
7512855Sgabeblack@google.com    sc_out<T>                     out;
7612855Sgabeblack@google.com    sc_port<sc_signal_out_if<T> > port_out;
7712855Sgabeblack@google.com
7812855Sgabeblack@google.com    prim_source<T> prim_source1;
7912855Sgabeblack@google.com
8012855Sgabeblack@google.com    SC_CTOR( hier_source )
8112855Sgabeblack@google.com    : prim_source1( "prim_source1" )
8212855Sgabeblack@google.com    {
8312855Sgabeblack@google.com	prim_source1( out, port_out);
8412855Sgabeblack@google.com    }
8512855Sgabeblack@google.com};
8612855Sgabeblack@google.com
8712855Sgabeblack@google.comtemplate <class T>
8812855Sgabeblack@google.comSC_MODULE( hier_transfer )
8912855Sgabeblack@google.com{
9012855Sgabeblack@google.com    sc_in<T>                      in;
9112855Sgabeblack@google.com    sc_port<sc_signal_in_if<T> >  port_in;
9212855Sgabeblack@google.com    sc_out<T>                     out;
9312855Sgabeblack@google.com    sc_port<sc_signal_out_if<T> > port_out;
9412855Sgabeblack@google.com
9512855Sgabeblack@google.com    prim_transfer<T> prim_transfer1;
9612855Sgabeblack@google.com
9712855Sgabeblack@google.com    SC_CTOR( hier_transfer )
9812855Sgabeblack@google.com    : prim_transfer1( "prim_transfer1" )
9912855Sgabeblack@google.com    {
10012855Sgabeblack@google.com	prim_transfer1( in, port_in, out, port_out);
10112855Sgabeblack@google.com    }
10212855Sgabeblack@google.com};
10312855Sgabeblack@google.com
10412855Sgabeblack@google.comtemplate <class T>
10512855Sgabeblack@google.comSC_MODULE( hier_sink )
10612855Sgabeblack@google.com{
10712855Sgabeblack@google.com    sc_in<T>                     in;
10812855Sgabeblack@google.com    sc_port<sc_signal_in_if<T> > port_in;
10912855Sgabeblack@google.com
11012855Sgabeblack@google.com    prim_sink<T> prim_sink1;
11112855Sgabeblack@google.com
11212855Sgabeblack@google.com    SC_CTOR( hier_sink )
11312855Sgabeblack@google.com    : prim_sink1( "prim_sink1" )
11412855Sgabeblack@google.com    {
11512855Sgabeblack@google.com	prim_sink1( in, port_in );
11612855Sgabeblack@google.com    }
11712855Sgabeblack@google.com};
11812855Sgabeblack@google.com
11912855Sgabeblack@google.comtemplate <class T>
12012855Sgabeblack@google.comSC_MODULE( hier1 )
12112855Sgabeblack@google.com{
12212855Sgabeblack@google.com    sc_signal<T> sig1;
12312855Sgabeblack@google.com    sc_signal<T> sig2;
12412855Sgabeblack@google.com    sc_signal<T> sig3;
12512855Sgabeblack@google.com    sc_signal<T> sig4;
12612855Sgabeblack@google.com
12712855Sgabeblack@google.com    prim_source<T>   prim_source1;
12812855Sgabeblack@google.com    prim_transfer<T> prim_transfer1;
12912855Sgabeblack@google.com    prim_sink<T>     prim_sink1;
13012855Sgabeblack@google.com
13112855Sgabeblack@google.com    SC_CTOR( hier1 )
13212855Sgabeblack@google.com    : prim_source1( "prim_source1" ),
13312855Sgabeblack@google.com      prim_transfer1( "prim_transfer1" ),
13412855Sgabeblack@google.com      prim_sink1( "prim_sink1" )
13512855Sgabeblack@google.com    {
13612855Sgabeblack@google.com	prim_source1( sig1, sig2);
13712855Sgabeblack@google.com	prim_transfer1( sig1, sig2, sig3, sig4);
13812855Sgabeblack@google.com	prim_sink1( sig3, sig4);
13912855Sgabeblack@google.com    }
14012855Sgabeblack@google.com};
14112855Sgabeblack@google.com
14212855Sgabeblack@google.comtemplate <class T>
14312855Sgabeblack@google.comSC_MODULE( hier2 )
14412855Sgabeblack@google.com{
14512855Sgabeblack@google.com    sc_signal<T> sig1;
14612855Sgabeblack@google.com    sc_signal<T> sig2;
14712855Sgabeblack@google.com    sc_signal<T> sig3;
14812855Sgabeblack@google.com    sc_signal<T> sig4;
14912855Sgabeblack@google.com
15012855Sgabeblack@google.com    hier_source<T>   hier_source1;
15112855Sgabeblack@google.com    hier_transfer<T> hier_transfer1;
15212855Sgabeblack@google.com    hier_sink<T>     hier_sink1;
15312855Sgabeblack@google.com
15412855Sgabeblack@google.com    SC_CTOR( hier2 )
15512855Sgabeblack@google.com    : hier_source1( "hier_source1" ),
15612855Sgabeblack@google.com      hier_transfer1( "hier_transfer1" ),
15712855Sgabeblack@google.com      hier_sink1( "hier_sink1" )
15812855Sgabeblack@google.com    {
15912855Sgabeblack@google.com	hier_source1( sig1, sig2);
16012855Sgabeblack@google.com	hier_transfer1( sig1, sig2, sig3, sig4);
16112855Sgabeblack@google.com	hier_sink1( sig3, sig4);
16212855Sgabeblack@google.com    }
16312855Sgabeblack@google.com};
16412855Sgabeblack@google.com
16512855Sgabeblack@google.comint
16612855Sgabeblack@google.comsc_main( int, char*[] )
16712855Sgabeblack@google.com{
16812855Sgabeblack@google.com    hier1<int> hier1_int( "hier1_int" );
16912855Sgabeblack@google.com    hier1<bool> hier1_bool( "hier1_bool" );
17012855Sgabeblack@google.com    hier1<sc_logic> hier1_logic( "hier1_logic" );
17112855Sgabeblack@google.com
17212855Sgabeblack@google.com    hier2<int> hier2_int( "hier2_int" );
17312855Sgabeblack@google.com    hier2<bool> hier2_bool( "hier2_bool" );
17412855Sgabeblack@google.com    hier2<sc_logic> hier2_logic( "hier2_logic" );
17512855Sgabeblack@google.com
17612855Sgabeblack@google.com    sc_start(0, SC_NS);
17712855Sgabeblack@google.com
17812855Sgabeblack@google.com    return 0;
17912855Sgabeblack@google.com}
180