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 --- .../communication/sc_fifo/test04/golden/test04.log | 185 +++++++++++++++++++++ .../communication/sc_fifo/test04/test04.cpp | 145 ++++++++++++++++ 2 files changed, 330 insertions(+) create mode 100644 src/systemc/tests/systemc/communication/sc_fifo/test04/golden/test04.log create mode 100644 src/systemc/tests/systemc/communication/sc_fifo/test04/test04.cpp (limited to 'src/systemc/tests/systemc/communication/sc_fifo/test04') diff --git a/src/systemc/tests/systemc/communication/sc_fifo/test04/golden/test04.log b/src/systemc/tests/systemc/communication/sc_fifo/test04/golden/test04.log new file mode 100644 index 000000000..4c8333c81 --- /dev/null +++ b/src/systemc/tests/systemc/communication/sc_fifo/test04/golden/test04.log @@ -0,0 +1,185 @@ +SystemC Simulation +10 ns,1: writer: blocking write +10 ns,1: reader: blocking read 1 +10 ns,2: reader: 0 +10 ns,2: reader: 1 +10 ns,2: reader: 2 +10 ns,2: reader: 3 +10 ns,2: reader: 4 +10 ns,2: reader: 5 +10 ns,2: reader: 6 +10 ns,2: reader: 7 +10 ns,2: reader: 8 +10 ns,2: reader: 9 +10 ns,4: reader: 10 +10 ns,4: reader: 11 +10 ns,4: reader: 12 +10 ns,4: reader: 13 +10 ns,4: reader: 14 +20 ns,5: writer: 5 free spaces +20 ns,5: writer: non-blocking write +20 ns,5: writer: waiting +20 ns,5: reader: 5 available samples +20 ns,5: reader: blocking read 2 +20 ns,5: reader: 15 +20 ns,5: reader: 16 +20 ns,5: reader: 17 +20 ns,5: reader: 18 +20 ns,5: reader: 19 +20 ns,6: reader: 20 +20 ns,6: reader: 21 +20 ns,6: reader: 22 +20 ns,6: reader: 23 +20 ns,6: reader: 24 +20 ns,6: writer: data read event +20 ns,6: writer: waiting +20 ns,7: reader: 26 +20 ns,7: reader: 27 +20 ns,7: reader: 28 +20 ns,7: reader: 29 +20 ns,7: reader: 30 +20 ns,7: writer: data read event +20 ns,7: writer: waiting +20 ns,8: writer: data read event +30 ns,9: reader: 10 available samples +30 ns,9: reader: non-blocking read +30 ns,9: reader: 32 +30 ns,9: reader: 33 +30 ns,9: reader: 34 +30 ns,9: reader: 35 +30 ns,9: reader: 36 +30 ns,9: reader: 38 +30 ns,9: reader: 39 +30 ns,9: reader: 40 +30 ns,9: reader: 41 +30 ns,9: reader: 42 +30 ns,9: reader: waiting +30 ns,9: writer: blocking write +30 ns,11: reader: data written event +30 ns,11: reader: 43 +30 ns,11: reader: 44 +30 ns,11: reader: 45 +30 ns,11: reader: 46 +30 ns,11: reader: 47 +40 ns,13: reader: blocking read 1 +40 ns,13: reader: 48 +40 ns,13: reader: 49 +40 ns,13: reader: 50 +40 ns,13: reader: 51 +40 ns,13: reader: 52 +40 ns,13: reader: 53 +40 ns,13: reader: 54 +40 ns,13: reader: 55 +40 ns,13: reader: 56 +40 ns,13: reader: 57 +40 ns,15: reader: 58 +40 ns,15: reader: 59 +40 ns,15: reader: 60 +40 ns,15: reader: 61 +40 ns,15: reader: 62 +50 ns,16: writer: 10 free spaces +50 ns,16: writer: non-blocking write +50 ns,16: writer: waiting +50 ns,16: reader: 0 available samples +50 ns,16: reader: blocking read 2 +50 ns,17: reader: 63 +50 ns,17: reader: 64 +50 ns,17: reader: 65 +50 ns,17: reader: 66 +50 ns,17: reader: 67 +50 ns,17: reader: 68 +50 ns,17: reader: 69 +50 ns,17: reader: 70 +50 ns,17: reader: 71 +50 ns,17: reader: 72 +50 ns,18: writer: data read event +50 ns,19: reader: 74 +50 ns,19: reader: 75 +50 ns,19: reader: 76 +50 ns,19: reader: 77 +50 ns,19: reader: 78 +60 ns,20: writer: blocking write +60 ns,20: reader: 5 available samples +60 ns,20: reader: non-blocking read +60 ns,20: reader: 79 +60 ns,20: reader: 80 +60 ns,20: reader: 81 +60 ns,20: reader: 82 +60 ns,20: reader: 83 +60 ns,20: reader: waiting +60 ns,21: reader: data written event +60 ns,21: reader: 84 +60 ns,21: reader: 85 +60 ns,21: reader: 86 +60 ns,21: reader: 87 +60 ns,21: reader: 88 +60 ns,21: reader: waiting +60 ns,22: reader: data written event +60 ns,22: reader: 89 +60 ns,22: reader: 90 +60 ns,22: reader: 91 +60 ns,22: reader: 92 +60 ns,22: reader: 93 +70 ns,24: reader: blocking read 1 +70 ns,24: reader: 94 +70 ns,24: reader: 95 +70 ns,24: reader: 96 +70 ns,24: reader: 97 +70 ns,24: reader: 98 +70 ns,24: reader: 99 +70 ns,24: reader: 100 +70 ns,24: reader: 101 +70 ns,24: reader: 102 +70 ns,24: reader: 103 +70 ns,24: writer: 0 free spaces +70 ns,24: writer: non-blocking write +70 ns,24: writer: waiting +70 ns,25: writer: data read event +70 ns,25: writer: waiting +70 ns,26: reader: 105 +70 ns,26: reader: 106 +70 ns,26: reader: 107 +70 ns,26: reader: 108 +70 ns,26: reader: 109 +70 ns,27: writer: data read event +70 ns,27: writer: waiting +80 ns,28: reader: 10 available samples +80 ns,28: reader: blocking read 2 +80 ns,28: reader: 110 +80 ns,28: reader: 111 +80 ns,28: reader: 112 +80 ns,28: reader: 113 +80 ns,28: reader: 114 +80 ns,28: reader: 116 +80 ns,28: reader: 117 +80 ns,28: reader: 118 +80 ns,28: reader: 119 +80 ns,28: reader: 120 +80 ns,29: writer: data read event +80 ns,30: reader: 122 +80 ns,30: reader: 123 +80 ns,30: reader: 124 +80 ns,30: reader: 125 +80 ns,30: reader: 126 +90 ns,31: writer: blocking write +90 ns,31: reader: 0 available samples +90 ns,31: reader: non-blocking read +90 ns,31: reader: waiting +90 ns,32: reader: data written event +90 ns,32: reader: 127 +90 ns,32: reader: 128 +90 ns,32: reader: 129 +90 ns,32: reader: 130 +90 ns,32: reader: 131 +90 ns,32: reader: 132 +90 ns,32: reader: 133 +90 ns,32: reader: 134 +90 ns,32: reader: 135 +90 ns,32: reader: 136 +90 ns,32: reader: waiting +90 ns,34: reader: data written event +90 ns,34: reader: 137 +90 ns,34: reader: 138 +90 ns,34: reader: 139 +90 ns,34: reader: 140 +90 ns,34: reader: 141 diff --git a/src/systemc/tests/systemc/communication/sc_fifo/test04/test04.cpp b/src/systemc/tests/systemc/communication/sc_fifo/test04/test04.cpp new file mode 100644 index 000000000..be6ee57c5 --- /dev/null +++ b/src/systemc/tests/systemc/communication/sc_fifo/test04/test04.cpp @@ -0,0 +1,145 @@ +/***************************************************************************** + + 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. + + *****************************************************************************/ + +/***************************************************************************** + + test04.cpp -- + + Original Author: Martin Janssen, Synopsys, Inc., 2002-03-23 + + *****************************************************************************/ + +/***************************************************************************** + + MODIFICATION LOG - modifiers, enter your name, affiliation, date and + changes you are making here. + + Name, Affiliation, Date: + Description of Modification: + + *****************************************************************************/ + +// test of sc_fifo events + +#include "systemc.h" + +#define W_INFO(msg) \ + cout << sc_time_stamp() << "," << sc_delta_count() \ + << ": writer: " << msg << endl; + +#define R_INFO(msg) \ + cout << sc_time_stamp() << "," << sc_delta_count() \ + << ": reader: " << msg << endl; + +SC_MODULE( writer ) +{ + // port(s) + sc_fifo_out out; + + // process(es) + void main_action() + { + int val = 0; + while( true ) { + wait( 10, SC_NS ); // wait for 10 ns + W_INFO( "blocking write" ); + for( int i = 0; i < 20; i ++ ) { + out.write( val ++ ); // blocking write + } + wait( 10, SC_NS ); + W_INFO( out.num_free() << " free spaces" ); + W_INFO( "non-blocking write" ); + for( int i = 0; i < 20; i ++ ) { + while( ! out.nb_write( val ++ ) ) { // non-blocking write + W_INFO( "waiting" ); + wait( out.data_read_event() ); + W_INFO( "data read event" ); + } + } + } + } + + SC_CTOR( writer ) + { + SC_THREAD( main_action ); + } +}; + +SC_MODULE( reader ) +{ + // port(s) + sc_fifo_in in; + + // process(es) + void main_action() + { + int val; + while( true ) { + wait( 10, SC_NS ); // wait for 10 ns + R_INFO( "blocking read 1" ); + for( int i = 0; i < 15; i ++ ) { + in.read( val ); // blocking read + R_INFO( val ); + } + wait( 10, SC_NS ); + R_INFO( in.num_available() << " available samples" ); + R_INFO( "blocking read 2" ); + for( int i = 0; i < 15; i ++ ) { + val = in.read(); // blocking read + R_INFO( val ); + } + wait( 10, SC_NS ); + R_INFO( in.num_available() << " available samples" ); + R_INFO( "non-blocking read" ); + for( int i = 0; i < 15; i ++ ) { + while( ! in.nb_read( val ) ) { // non-blocking read + R_INFO( "waiting" ); + wait( in.data_written_event() ); + R_INFO( "data written event" ); + } + R_INFO( val ); + } + } + } + + SC_CTOR( reader ) + { + SC_THREAD( main_action ); + } +}; + +int sc_main( int, char*[] ) +{ + // sc_clock c; + + // declare channel(s) + sc_fifo fifo( 10 ); + + // instantiate block(s) and connect to channel(s) + writer w( "writer" ); + reader r( "reader" ); + + w.out( fifo ); + r.in( fifo ); + + // run the simulation + sc_start( 100, SC_NS ); + + return 0; +} -- cgit v1.2.3