From 16fa8d7cc8c92f5ab879e4cf9c6c0bbb3567860f Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Thu, 24 May 2018 01:37:55 -0700 Subject: systemc: Import tests from the Accellera systemc distribution. Change-Id: Iad76b398949a55d768a34d027a2d8e3739953da6 Reviewed-on: https://gem5-review.googlesource.com/10845 Reviewed-by: Giacomo Travaglini Maintainer: Gabe Black --- .../kernel/sc_sensitive/test01/golden/test01.log | 19 +++ .../systemc/kernel/sc_sensitive/test01/test01.cpp | 122 ++++++++++++++++++++ .../kernel/sc_sensitive/test02/golden/test02.log | 31 +++++ .../systemc/kernel/sc_sensitive/test02/test02.cpp | 128 +++++++++++++++++++++ .../kernel/sc_sensitive/test03/golden/test03.log | 33 ++++++ .../systemc/kernel/sc_sensitive/test03/test03.cpp | 128 +++++++++++++++++++++ .../kernel/sc_sensitive/test04/golden/test04.log | 5 + .../systemc/kernel/sc_sensitive/test04/test04.cpp | 31 +++++ .../kernel/sc_sensitive/test05/golden/test05.log | 7 ++ .../systemc/kernel/sc_sensitive/test05/test05.cpp | 37 ++++++ 10 files changed, 541 insertions(+) create mode 100644 src/systemc/tests/systemc/kernel/sc_sensitive/test01/golden/test01.log create mode 100644 src/systemc/tests/systemc/kernel/sc_sensitive/test01/test01.cpp create mode 100644 src/systemc/tests/systemc/kernel/sc_sensitive/test02/golden/test02.log create mode 100644 src/systemc/tests/systemc/kernel/sc_sensitive/test02/test02.cpp create mode 100644 src/systemc/tests/systemc/kernel/sc_sensitive/test03/golden/test03.log create mode 100644 src/systemc/tests/systemc/kernel/sc_sensitive/test03/test03.cpp create mode 100644 src/systemc/tests/systemc/kernel/sc_sensitive/test04/golden/test04.log create mode 100644 src/systemc/tests/systemc/kernel/sc_sensitive/test04/test04.cpp create mode 100644 src/systemc/tests/systemc/kernel/sc_sensitive/test05/golden/test05.log create mode 100644 src/systemc/tests/systemc/kernel/sc_sensitive/test05/test05.cpp (limited to 'src/systemc/tests/systemc/kernel/sc_sensitive') diff --git a/src/systemc/tests/systemc/kernel/sc_sensitive/test01/golden/test01.log b/src/systemc/tests/systemc/kernel/sc_sensitive/test01/golden/test01.log new file mode 100644 index 000000000..e0a49dc03 --- /dev/null +++ b/src/systemc/tests/systemc/kernel/sc_sensitive/test01/golden/test01.log @@ -0,0 +1,19 @@ +SystemC Simulation +i = 0 +j = 0 +i = 1 +j = 1 +i = 2 +j = 2 +i = 3 +j = 3 +i = 4 +j = 4 +i = 5 +j = 5 +i = 6 +j = 6 +i = 7 +j = 7 +i = 8 +j = 8 diff --git a/src/systemc/tests/systemc/kernel/sc_sensitive/test01/test01.cpp b/src/systemc/tests/systemc/kernel/sc_sensitive/test01/test01.cpp new file mode 100644 index 000000000..c6e1e52f5 --- /dev/null +++ b/src/systemc/tests/systemc/kernel/sc_sensitive/test01/test01.cpp @@ -0,0 +1,122 @@ +/***************************************************************************** + + Licensed to Accellera Systems Initiative Inc. (Accellera) under one or + more contributor license agreements. See the NOTICE file distributed + with this work for additional information regarding copyright ownership. + Accellera licenses this file to you under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with the + License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied. See the License for the specific language governing + permissions and limitations under the License. + + *****************************************************************************/ + +/***************************************************************************** + + test01.cpp -- + + Original Author: Martin Janssen, Synopsys, Inc., 2002-03-22 + Ucar Aziz, Synopsys, Inc. + + *****************************************************************************/ + +/***************************************************************************** + + MODIFICATION LOG - modifiers, enter your name, affiliation, date and + changes you are making here. + + Name, Affiliation, Date: + Description of Modification: + + *****************************************************************************/ + +// $Log: test01.cpp,v $ +// Revision 1.1.1.1 2006/12/15 20:26:04 acg +// systemc_tests-2.3 +// +// Revision 1.2 2006/01/19 00:46:58 acg +// Andy Goodrich: Added CVS logging. +// + +// test of sc_sensitive::operator()(sc_cthread_process*, sc_in(inout)) + +#include "systemc.h" + + +SC_MODULE( mod_a ) +{ + sc_in clk; + sc_in in1; + + void main_action1() + { + int i = 0; + while( true ) { + wait(); + cout << "i = " << i << endl; + i ++; + } + } + + void main_action2() + { + int j = 0; + while( true ) { + wait(); + cout << "j = " << j << endl; + j ++; + } + } + + SC_CTOR(mod_a) + { + SC_CTHREAD( main_action1, clk ); + SC_CTHREAD( main_action2, in1 ); + } +}; + +SC_MODULE( mod_b ) +{ + sc_in clk; + sc_inout in1; + + void main_action() + { + bool j = true; + while( true ) { + wait(); + in1->write( j ); + j = !j; + } + } + + SC_CTOR( mod_b ) + { + SC_CTHREAD( main_action, clk ); + } +}; + +int +sc_main( int, char*[] ) +{ + sc_clock clk( "clk", 10, SC_NS ); + sc_clock clk1( "clk1", 5, SC_NS ); + sc_signal channel; + mod_a a( "a" ); + mod_b b( "b" ); + + b.clk( clk1 ); + b.in1( channel ); + a.clk( clk ); + a.in1( channel ); + + sc_start( 100, SC_NS ); + + return 0; +} diff --git a/src/systemc/tests/systemc/kernel/sc_sensitive/test02/golden/test02.log b/src/systemc/tests/systemc/kernel/sc_sensitive/test02/golden/test02.log new file mode 100644 index 000000000..358509035 --- /dev/null +++ b/src/systemc/tests/systemc/kernel/sc_sensitive/test02/golden/test02.log @@ -0,0 +1,31 @@ +SystemC Simulation + +Info: (I804) /IEEE_Std_1666/deprecated: use of () to specify sensitivity is deprecated, use << instead + +Info: (I804) /IEEE_Std_1666/deprecated: sc_sensitive_neg is deprecated use sc_sensitive << with neg() instead +j = 0 +i = 0 +j = 1 +i = 1 +j = 2 +i = 2 +j = 3 +i = 3 +j = 4 +i = 4 +j = 5 +i = 5 +j = 6 +i = 6 +j = 7 +i = 7 +j = 8 +i = 8 + +Info: (I804) /IEEE_Std_1666/deprecated: You can turn off warnings about + IEEE 1666 deprecated features by placing this method call + as the first statement in your sc_main() function: + + sc_core::sc_report_handler::set_actions( "/IEEE_Std_1666/deprecated", + sc_core::SC_DO_NOTHING ); + diff --git a/src/systemc/tests/systemc/kernel/sc_sensitive/test02/test02.cpp b/src/systemc/tests/systemc/kernel/sc_sensitive/test02/test02.cpp new file mode 100644 index 000000000..1607be024 --- /dev/null +++ b/src/systemc/tests/systemc/kernel/sc_sensitive/test02/test02.cpp @@ -0,0 +1,128 @@ +/***************************************************************************** + + Licensed to Accellera Systems Initiative Inc. (Accellera) under one or + more contributor license agreements. See the NOTICE file distributed + with this work for additional information regarding copyright ownership. + Accellera licenses this file to you under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with the + License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied. See the License for the specific language governing + permissions and limitations under the License. + + *****************************************************************************/ + +/***************************************************************************** + + test02.cpp -- + + Original Author: Martin Janssen, Synopsys, Inc., 2002-03-22 + Ucar Aziz, Synopsys, Inc. + + *****************************************************************************/ + +/***************************************************************************** + + MODIFICATION LOG - modifiers, enter your name, affiliation, date and + changes you are making here. + + Name, Affiliation, Date: + Description of Modification: + + *****************************************************************************/ + +// $Log: test02.cpp,v $ +// Revision 1.1.1.1 2006/12/15 20:26:04 acg +// systemc_tests-2.3 +// +// Revision 1.2 2006/01/19 00:47:01 acg +// Andy Goodrich: Added CVS logging. +// + +// test of sc_sensitive_neg::operator(<<)()(sc_inout) + +#include "systemc.h" + +SC_MODULE( mod_a ) +{ + sc_in in1; + sc_in in2; + + void main_action1() + { + int i = 0; + while( true ) { + wait(); + cout << "i = " << i << endl; + i ++; + } + } + + void main_action2() + { + int j = 0; + while( true ) { + wait(); + cout << "j = " << j << endl; + j ++; + } + } + + SC_CTOR( mod_a ) + { + SC_THREAD( main_action1 ); + sensitive_neg( in1 ); + SC_THREAD( main_action2 ); + sensitive_neg << in2; + } +}; + +SC_MODULE( mod_b ) +{ + sc_in clk; + sc_inout in1; + + void main_action() + { + bool j = true; + while( true ) { + wait(); + in1->write( j ); + j = !j; + } + } + + SC_CTOR( mod_b ) + { + SC_CTHREAD( main_action, clk ); + } +}; + +int +sc_main( int, char*[] ) +{ + sc_clock clk1( "clk", 5, SC_NS ); + sc_clock clk2( "clk1", 5, SC_NS ); + sc_signal sig_1; + sc_signal sig_2; + mod_a a( "a" ); + mod_b b1( "b1" ); + mod_b b2( "b2" ); + + b1.clk( clk1 ); + b1.in1( sig_1 ); + b2.clk( clk2 ); + b2.in1( sig_2 ); + + a.in1( sig_1 ); + a.in2( sig_2 ); + + sc_start( 100, SC_NS ); + + return 0; +} diff --git a/src/systemc/tests/systemc/kernel/sc_sensitive/test03/golden/test03.log b/src/systemc/tests/systemc/kernel/sc_sensitive/test03/golden/test03.log new file mode 100644 index 000000000..9523bdb62 --- /dev/null +++ b/src/systemc/tests/systemc/kernel/sc_sensitive/test03/golden/test03.log @@ -0,0 +1,33 @@ +SystemC Simulation + +Info: (I804) /IEEE_Std_1666/deprecated: use of () to specify sensitivity is deprecated, use << instead + +Info: (I804) /IEEE_Std_1666/deprecated: sc_sensitive_pos is deprecated use sc_sensitive << with pos() instead +j = 0 +i = 0 +j = 1 +i = 1 +j = 2 +i = 2 +j = 3 +i = 3 +j = 4 +i = 4 +j = 5 +i = 5 +j = 6 +i = 6 +j = 7 +i = 7 +j = 8 +i = 8 +j = 9 +i = 9 + +Info: (I804) /IEEE_Std_1666/deprecated: You can turn off warnings about + IEEE 1666 deprecated features by placing this method call + as the first statement in your sc_main() function: + + sc_core::sc_report_handler::set_actions( "/IEEE_Std_1666/deprecated", + sc_core::SC_DO_NOTHING ); + diff --git a/src/systemc/tests/systemc/kernel/sc_sensitive/test03/test03.cpp b/src/systemc/tests/systemc/kernel/sc_sensitive/test03/test03.cpp new file mode 100644 index 000000000..5eca3d7a2 --- /dev/null +++ b/src/systemc/tests/systemc/kernel/sc_sensitive/test03/test03.cpp @@ -0,0 +1,128 @@ +/***************************************************************************** + + Licensed to Accellera Systems Initiative Inc. (Accellera) under one or + more contributor license agreements. See the NOTICE file distributed + with this work for additional information regarding copyright ownership. + Accellera licenses this file to you under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with the + License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied. See the License for the specific language governing + permissions and limitations under the License. + + *****************************************************************************/ + +/***************************************************************************** + + test03.cpp -- + + Original Author: Martin Janssen, Synopsys, Inc., 2002-03-22 + Ucar Aziz, Synopsys, Inc. + + *****************************************************************************/ + +/***************************************************************************** + + MODIFICATION LOG - modifiers, enter your name, affiliation, date and + changes you are making here. + + Name, Affiliation, Date: + Description of Modification: + + *****************************************************************************/ + +// $Log: test03.cpp,v $ +// Revision 1.1.1.1 2006/12/15 20:26:04 acg +// systemc_tests-2.3 +// +// Revision 1.2 2006/01/19 00:47:04 acg +// Andy Goodrich: Added CVS logging. +// + +// test of sc_sensitive_pos::operator(<<)()(sc_inout) + +#include "systemc.h" + +SC_MODULE( mod_a ) +{ + sc_in in1; + sc_in in2; + + void main_action1() + { + int i = 0; + while( true ) { + wait(); + cout << "i = " << i << endl; + i ++; + } + } + + void main_action2() + { + int j = 0; + while( true ) { + wait(); + cout << "j = " << j << endl; + j ++; + } + } + + SC_CTOR( mod_a ) + { + SC_THREAD( main_action1 ); + sensitive_pos( in1 ); + SC_THREAD( main_action2 ); + sensitive_pos << in2; + } +}; + +SC_MODULE( mod_b ) +{ + sc_in clk; + sc_inout in1; + + void main_action() + { + bool j = true; + while( true ) { + wait(); + in1->write( j ); + j = !j; + } + } + + SC_CTOR( mod_b ) + { + SC_CTHREAD( main_action, clk ); + } +}; + +int +sc_main( int, char*[] ) +{ + sc_clock clk1( "clk", 5, SC_NS ); + sc_clock clk2( "clk1", 5, SC_NS ); + sc_signal sig_1; + sc_signal sig_2; + mod_a a( "a" ); + mod_b b1( "b1" ); + mod_b b2( "b2" ); + + b1.clk( clk1 ); + b1.in1( sig_1 ); + b2.clk( clk2 ); + b2.in1( sig_2 ); + + a.in1( sig_1 ); + a.in2( sig_2 ); + + sc_start( 100, SC_NS ); + + return 0; +} diff --git a/src/systemc/tests/systemc/kernel/sc_sensitive/test04/golden/test04.log b/src/systemc/tests/systemc/kernel/sc_sensitive/test04/golden/test04.log new file mode 100644 index 000000000..00de35f19 --- /dev/null +++ b/src/systemc/tests/systemc/kernel/sc_sensitive/test04/golden/test04.log @@ -0,0 +1,5 @@ +SystemC Simulation + +Error: (E526) make sensitive failed: simulation running +In file: +In process: x.able @ 0 s diff --git a/src/systemc/tests/systemc/kernel/sc_sensitive/test04/test04.cpp b/src/systemc/tests/systemc/kernel/sc_sensitive/test04/test04.cpp new file mode 100644 index 000000000..7892cd28a --- /dev/null +++ b/src/systemc/tests/systemc/kernel/sc_sensitive/test04/test04.cpp @@ -0,0 +1,31 @@ +#include "systemc.h" + +SC_MODULE(X) +{ + SC_CTOR(X) + { + SC_THREAD(able); + sensitive << clk.pos(); + } + + void able() + { + for (;;) + { + wait(); + sensitive << clk.posedge_event(); + cout << "able: " << sc_time_stamp() << endl; + } + } + sc_in_clk clk; +}; + +int sc_main(int argc, char* argv[]) +{ + sc_clock clock; + X x("x"); + x.clk(clock); + + sc_start(100, SC_NS); + return 0; +} diff --git a/src/systemc/tests/systemc/kernel/sc_sensitive/test05/golden/test05.log b/src/systemc/tests/systemc/kernel/sc_sensitive/test05/golden/test05.log new file mode 100644 index 000000000..252bd31f1 --- /dev/null +++ b/src/systemc/tests/systemc/kernel/sc_sensitive/test05/golden/test05.log @@ -0,0 +1,7 @@ +SystemC Simulation +1 ns +5 ns +6 ns +1006 ns + +Info: /OSCI/SystemC: Simulation stopped by user. diff --git a/src/systemc/tests/systemc/kernel/sc_sensitive/test05/test05.cpp b/src/systemc/tests/systemc/kernel/sc_sensitive/test05/test05.cpp new file mode 100644 index 000000000..fc2a8b21d --- /dev/null +++ b/src/systemc/tests/systemc/kernel/sc_sensitive/test05/test05.cpp @@ -0,0 +1,37 @@ +#include "systemc.h" + +SC_MODULE(TB) +{ + SC_CTOR(TB) + { + SC_THREAD(exec); + sensitive << m_clk.pos(); + } + void exec() + { + for (;;) + { + wait(2); + cout << sc_time_stamp() << endl; + wait(4); + cout << sc_time_stamp() << endl; + wait(1); + cout << sc_time_stamp() << endl; + wait(1000); + cout << sc_time_stamp() << endl; + sc_stop(); + } + } + sc_in_clk m_clk; +}; + +int sc_main( int, char*[] ) +{ + sc_clock clock; + TB tb("tb"); + + tb.m_clk(clock); + sc_start(2000, SC_NS); + + return 0; +} -- cgit v1.2.3