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