test01.cpp revision 12855:588919e0e4aa
111723Sar4jc@virginia.edu/*****************************************************************************
211963Sar4jc@virginia.edu
311963Sar4jc@virginia.edu  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
411963Sar4jc@virginia.edu  more contributor license agreements.  See the NOTICE file distributed
511963Sar4jc@virginia.edu  with this work for additional information regarding copyright ownership.
611723Sar4jc@virginia.edu  Accellera licenses this file to you under the Apache License, Version 2.0
711723Sar4jc@virginia.edu  (the "License"); you may not use this file except in compliance with the
811723Sar4jc@virginia.edu  License.  You may obtain a copy of the License at
911723Sar4jc@virginia.edu
1011723Sar4jc@virginia.edu    http://www.apache.org/licenses/LICENSE-2.0
1111723Sar4jc@virginia.edu
1211723Sar4jc@virginia.edu  Unless required by applicable law or agreed to in writing, software
1311723Sar4jc@virginia.edu  distributed under the License is distributed on an "AS IS" BASIS,
1411723Sar4jc@virginia.edu  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1511723Sar4jc@virginia.edu  implied.  See the License for the specific language governing
1611723Sar4jc@virginia.edu  permissions and limitations under the License.
1711723Sar4jc@virginia.edu
1811723Sar4jc@virginia.edu *****************************************************************************/
1911723Sar4jc@virginia.edu
2011723Sar4jc@virginia.edu/*****************************************************************************
2111723Sar4jc@virginia.edu
2211723Sar4jc@virginia.edu  test01.cpp --
2311723Sar4jc@virginia.edu
2411723Sar4jc@virginia.edu  Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15
2511723Sar4jc@virginia.edu
2611723Sar4jc@virginia.edu *****************************************************************************/
2711723Sar4jc@virginia.edu
2811723Sar4jc@virginia.edu/*****************************************************************************
2911723Sar4jc@virginia.edu
3011723Sar4jc@virginia.edu  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
3111723Sar4jc@virginia.edu  changes you are making here.
3211963Sar4jc@virginia.edu
3311963Sar4jc@virginia.edu      Name, Affiliation, Date:
3411723Sar4jc@virginia.edu  Description of Modification:
3511723Sar4jc@virginia.edu
3611723Sar4jc@virginia.edu *****************************************************************************/
3711723Sar4jc@virginia.edu
3811723Sar4jc@virginia.edu// test of sc_signal_rv.
3911963Sar4jc@virginia.edu
4011963Sar4jc@virginia.edu#include "systemc.h"
4111963Sar4jc@virginia.edu
4211723Sar4jc@virginia.eduSC_MODULE( mod_a )
4311723Sar4jc@virginia.edu{
4411723Sar4jc@virginia.edu    // ports
4511723Sar4jc@virginia.edu    sc_out_rv<1> out1;
4611723Sar4jc@virginia.edu    sc_out_rv<1> out2;
4711723Sar4jc@virginia.edu    sc_in_rv<1>  in;
4811723Sar4jc@virginia.edu
4911723Sar4jc@virginia.edu    // variables
5011723Sar4jc@virginia.edu    sc_logic l1;
5111723Sar4jc@virginia.edu    sc_logic l2;
5211963Sar4jc@virginia.edu
5314186Salec.roelke@gmail.com    // events
5414186Salec.roelke@gmail.com    sc_event ready1;
5511963Sar4jc@virginia.edu    sc_event ready2;
5611963Sar4jc@virginia.edu
5714186Salec.roelke@gmail.com    void out_action1()
5814186Salec.roelke@gmail.com    {
5911963Sar4jc@virginia.edu        for( int i = 0; i < 4; ++ i ) {
6011963Sar4jc@virginia.edu            l1 = sc_dt::sc_logic_value_t( i );
6111963Sar4jc@virginia.edu            for( int j = 0; j < 4; ++j ) {
6211963Sar4jc@virginia.edu                out1.write( sc_lv<1>( l1 ) );
6311963Sar4jc@virginia.edu                /*::sc_core::*/wait( 1, SC_NS );
6411963Sar4jc@virginia.edu                ready1.notify();
6513612Sgabeblack@google.com                ::sc_core::wait( SC_ZERO_TIME );
6613612Sgabeblack@google.com            }
6714186Salec.roelke@gmail.com        }
6811963Sar4jc@virginia.edu    }
6911963Sar4jc@virginia.edu
7011963Sar4jc@virginia.edu    void out_action2()
7111963Sar4jc@virginia.edu    {
7211963Sar4jc@virginia.edu        for( int i = 0; i < 4; ++ i ) {
7311963Sar4jc@virginia.edu            for( int j = 0; j < 4; ++ j ) {
7411963Sar4jc@virginia.edu                l2 = sc_dt::sc_logic_value_t( j );
7511963Sar4jc@virginia.edu                out2.write( sc_lv<1>( l2 ) );
7611963Sar4jc@virginia.edu                ::sc_core::wait( 1, SC_NS );
7711963Sar4jc@virginia.edu                ready2.notify();
7811963Sar4jc@virginia.edu                ::sc_core::wait( SC_ZERO_TIME );
7911963Sar4jc@virginia.edu            }
8011963Sar4jc@virginia.edu        }
8112031Sgabeblack@google.com    }
8211963Sar4jc@virginia.edu
8311723Sar4jc@virginia.edu    void in_action()
8412449Sgabeblack@google.com    {
8511963Sar4jc@virginia.edu        for( int i = 0; i < 16; ++ i ) {
8611723Sar4jc@virginia.edu            ::sc_core::wait( ready1 & ready2 );
8711723Sar4jc@virginia.edu            cout << l1 << " " << l2 << " -> " << in.read() << endl;
8811723Sar4jc@virginia.edu        }
8911723Sar4jc@virginia.edu    }
9011723Sar4jc@virginia.edu
91    SC_CTOR( mod_a )
92    {
93        SC_THREAD( out_action1 );
94        SC_THREAD( out_action2 );
95        SC_THREAD( in_action );
96    }
97};
98
99int
100sc_main( int, char*[] )
101{
102    sc_signal_rv<1> sig;
103
104    mod_a a( "a" );
105
106    a.out1( sig );
107    a.out2( sig );
108    a.in( sig );
109
110    sc_start();
111
112    return 0;
113}
114