test10.cpp revision 12855:588919e0e4aa
110448Snilay@cs.wisc.edu/*****************************************************************************
210448Snilay@cs.wisc.edu
310448Snilay@cs.wisc.edu  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
410448Snilay@cs.wisc.edu  more contributor license agreements.  See the NOTICE file distributed
510448Snilay@cs.wisc.edu  with this work for additional information regarding copyright ownership.
610448Snilay@cs.wisc.edu  Accellera licenses this file to you under the Apache License, Version 2.0
710448Snilay@cs.wisc.edu  (the "License"); you may not use this file except in compliance with the
810448Snilay@cs.wisc.edu  License.  You may obtain a copy of the License at
910448Snilay@cs.wisc.edu
1010448Snilay@cs.wisc.edu    http://www.apache.org/licenses/LICENSE-2.0
1110448Snilay@cs.wisc.edu
1210448Snilay@cs.wisc.edu  Unless required by applicable law or agreed to in writing, software
1310448Snilay@cs.wisc.edu  distributed under the License is distributed on an "AS IS" BASIS,
1410448Snilay@cs.wisc.edu  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1510448Snilay@cs.wisc.edu  implied.  See the License for the specific language governing
1610448Snilay@cs.wisc.edu  permissions and limitations under the License.
1710448Snilay@cs.wisc.edu
1810448Snilay@cs.wisc.edu *****************************************************************************/
1910448Snilay@cs.wisc.edu
2010448Snilay@cs.wisc.edu/*****************************************************************************
2110448Snilay@cs.wisc.edu
2210447Snilay@cs.wisc.edu  test10.cpp --
2310447Snilay@cs.wisc.edu
2410447Snilay@cs.wisc.edu  Original Author: Ucar Aziz, Synopsys, Inc., 2002-02-15
2510447Snilay@cs.wisc.edu                   Martin Janssen, Synopsys, Inc., 2002-02-15
2610447Snilay@cs.wisc.edu
2710447Snilay@cs.wisc.edu *****************************************************************************/
2810447Snilay@cs.wisc.edu
2910447Snilay@cs.wisc.edu/*****************************************************************************
3010447Snilay@cs.wisc.edu
3110447Snilay@cs.wisc.edu  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
3210447Snilay@cs.wisc.edu  changes you are making here.
3310447Snilay@cs.wisc.edu
3410447Snilay@cs.wisc.edu      Name, Affiliation, Date:
3510447Snilay@cs.wisc.edu  Description of Modification:
3610447Snilay@cs.wisc.edu
3710447Snilay@cs.wisc.edu *****************************************************************************/
3810447Snilay@cs.wisc.edu
3910447Snilay@cs.wisc.edu// test of sc_prim_channel::next_trigger(sc_event_and_list&)
4010447Snilay@cs.wisc.edu
4110447Snilay@cs.wisc.edu#include <systemc.h>
4210447Snilay@cs.wisc.edu
4310447Snilay@cs.wisc.edu//write and read interfaces
4410447Snilay@cs.wisc.educlass write_if : virtual public
4510447Snilay@cs.wisc.edusc_interface
4610447Snilay@cs.wisc.edu {
4710447Snilay@cs.wisc.edu  public:
4810447Snilay@cs.wisc.edu   virtual void write() = 0;
4910447Snilay@cs.wisc.edu};
5010447Snilay@cs.wisc.edu
5110447Snilay@cs.wisc.educlass read_if : virtual public
5210447Snilay@cs.wisc.edusc_interface
5310447Snilay@cs.wisc.edu{
5410447Snilay@cs.wisc.edu public:
5510447Snilay@cs.wisc.edu  virtual void read( ) = 0;
5610447Snilay@cs.wisc.edu};
5710447Snilay@cs.wisc.edu
5810447Snilay@cs.wisc.edu// channel implements write_if and read_if interfaces
5910447Snilay@cs.wisc.educlass channel :
6010447Snilay@cs.wisc.edu  public sc_channel,
6110447Snilay@cs.wisc.edu  public write_if,
6210447Snilay@cs.wisc.edu  public read_if
6310447Snilay@cs.wisc.edu{
6410447Snilay@cs.wisc.edu
6510447Snilay@cs.wisc.edu  public :
6610447Snilay@cs.wisc.edu
6710447Snilay@cs.wisc.edu  //constructor
6810447Snilay@cs.wisc.edu  channel(sc_module_name name):sc_channel(name)  , data(0)
6910447Snilay@cs.wisc.edu  { }
7010447Snilay@cs.wisc.edu
7110447Snilay@cs.wisc.edu  //write to channel
7210447Snilay@cs.wisc.edu  void write(){
7310447Snilay@cs.wisc.edu    static int i = 0;
7410447Snilay@cs.wisc.edu    next_trigger(10, SC_NS);
7510447Snilay@cs.wisc.edu    data = i;
7610447Snilay@cs.wisc.edu    cout <<"simulation time" << ":" << sc_time_stamp()<<"    ";
7710447Snilay@cs.wisc.edu    cout<<"writting "<< data <<" to channel" << endl;
7810447Snilay@cs.wisc.edu
7910447Snilay@cs.wisc.edu      write_event_2.notify(5, SC_NS);
8010447Snilay@cs.wisc.edu      write_event_1.notify(5, SC_NS);
8110447Snilay@cs.wisc.edu
8210447Snilay@cs.wisc.edu
8310447Snilay@cs.wisc.edu    i++;
8410447Snilay@cs.wisc.edu  }
8510447Snilay@cs.wisc.edu
8610447Snilay@cs.wisc.edu  //read from channel
8710447Snilay@cs.wisc.edu  void read( ){
8810447Snilay@cs.wisc.edu    int j;
8910447Snilay@cs.wisc.edu    next_trigger(write_event_1 & write_event_2);
9010447Snilay@cs.wisc.edu    j = data;
9110447Snilay@cs.wisc.edu    cout <<"simulation time" << ":" << sc_time_stamp();
9210447Snilay@cs.wisc.edu    cout<<"    reading "<<j<<" from channel" << endl;
9310447Snilay@cs.wisc.edu  }
9410447Snilay@cs.wisc.edu
9510447Snilay@cs.wisc.edu  private:
9610447Snilay@cs.wisc.edu  int data;
9710447Snilay@cs.wisc.edu  sc_event write_event_1, write_event_2;
9810447Snilay@cs.wisc.edu
9910447Snilay@cs.wisc.edu};
10010447Snilay@cs.wisc.edu
10110447Snilay@cs.wisc.edu//source module
10210447Snilay@cs.wisc.eduSC_MODULE(mod_a)
10310447Snilay@cs.wisc.edu{
10410447Snilay@cs.wisc.edu  sc_port<write_if> out;
10510447Snilay@cs.wisc.edu
10610447Snilay@cs.wisc.edu  void write( )
10710447Snilay@cs.wisc.edu  {
10810447Snilay@cs.wisc.edu    out->write();
10910447Snilay@cs.wisc.edu  }
11010447Snilay@cs.wisc.edu
11110447Snilay@cs.wisc.edu  SC_CTOR( mod_a ){
11210447Snilay@cs.wisc.edu
11310447Snilay@cs.wisc.edu    SC_METHOD(write);
11410447Snilay@cs.wisc.edu  }
11510447Snilay@cs.wisc.edu};
11610447Snilay@cs.wisc.edu
11710447Snilay@cs.wisc.edu//sink module
11810447Snilay@cs.wisc.eduSC_MODULE(mod_b)
11910447Snilay@cs.wisc.edu{
12010447Snilay@cs.wisc.edu  sc_port<read_if> input;
12110447Snilay@cs.wisc.edu  int i;
12210447Snilay@cs.wisc.edu
12310447Snilay@cs.wisc.edu  void read( )
12410447Snilay@cs.wisc.edu  {
12510447Snilay@cs.wisc.edu   input->read();
12610447Snilay@cs.wisc.edu  }
12710447Snilay@cs.wisc.edu
12810447Snilay@cs.wisc.edu  SC_CTOR( mod_b ){
12910447Snilay@cs.wisc.edu
13010447Snilay@cs.wisc.edu    SC_METHOD(read);
13110447Snilay@cs.wisc.edu  }
13210447Snilay@cs.wisc.edu};
13310447Snilay@cs.wisc.edu
13410447Snilay@cs.wisc.edu
13510447Snilay@cs.wisc.eduint sc_main(int, char*[] )
13610447Snilay@cs.wisc.edu{
13710447Snilay@cs.wisc.edu  channel a("a");
13810447Snilay@cs.wisc.edu  mod_a modul_a("modul_a");
13910447Snilay@cs.wisc.edu  mod_b modul_b("modul_b");
14010447Snilay@cs.wisc.edu  modul_a.out(a);
14110447Snilay@cs.wisc.edu  modul_b.input(a);
14210447Snilay@cs.wisc.edu
14310447Snilay@cs.wisc.edu  sc_start(60, SC_NS);
14410447Snilay@cs.wisc.edu  return 0 ;
14510447Snilay@cs.wisc.edu}
14610447Snilay@cs.wisc.edu