stim.h revision 12855:588919e0e4aa
1/***************************************************************************** 2 3 Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 4 more contributor license agreements. See the NOTICE file distributed 5 with this work for additional information regarding copyright ownership. 6 Accellera licenses this file to you under the Apache License, Version 2.0 7 (the "License"); you may not use this file except in compliance with the 8 License. You may obtain a copy of the License at 9 10 http://www.apache.org/licenses/LICENSE-2.0 11 12 Unless required by applicable law or agreed to in writing, software 13 distributed under the License is distributed on an "AS IS" BASIS, 14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 15 implied. See the License for the specific language governing 16 permissions and limitations under the License. 17 18 *****************************************************************************/ 19 20/***************************************************************************** 21 22 stim.h -- 23 24 Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15 25 26 *****************************************************************************/ 27 28/***************************************************************************** 29 30 MODIFICATION LOG - modifiers, enter your name, affiliation, date and 31 changes you are making here. 32 33 Name, Affiliation, Date: 34 Description of Modification: 35 36 *****************************************************************************/ 37 38/******************************************************************************/ 39/*************************** stimulus Class Definition ********************/ 40/******************************************************************************/ 41 42#include "common.h" 43 44SC_MODULE( STIM ) 45{ 46 SC_HAS_PROCESS( STIM ); 47 48 sc_in_clk clk; 49 50 sc_signal<bool>& reset; 51 sc_signal<bool>& in_ok; 52 sc_signal<bool>& out_ok; 53 const sc_signal<bool>& instrb; 54 const sc_signal<bool>& outstrb; 55 signal_bool_vector &a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8;// -128 to 127 56 const signal_bool_vector &d1,&d2,&d3,&d4,&d5,&d6,&d7,&d8; 57 58 59 STIM( sc_module_name NAME, 60 sc_clock& TICK_P, 61 sc_signal<bool>& RESET, 62 sc_signal<bool>& IN_OK, 63 sc_signal<bool>& OUT_OK, 64 const sc_signal<bool>& INSTRB, 65 const sc_signal<bool>& OUTSTRB, 66 signal_bool_vector& A1, 67 signal_bool_vector& A2, 68 signal_bool_vector& A3, 69 signal_bool_vector& A4, 70 signal_bool_vector& A5, 71 signal_bool_vector& A6, 72 signal_bool_vector& A7, 73 signal_bool_vector& A8, 74 signal_bool_vector& D1, 75 signal_bool_vector& D2, 76 signal_bool_vector& D3, 77 signal_bool_vector& D4, 78 signal_bool_vector& D5, 79 signal_bool_vector& D6, 80 signal_bool_vector& D7, 81 signal_bool_vector& D8 82 ) 83 : 84 reset (RESET), 85 in_ok (IN_OK), 86 out_ok (OUT_OK), 87 instrb (INSTRB), 88 outstrb (OUTSTRB), 89 a1 (A1), a2(A2), a3(A3), a4(A4), 90 a5 (A5), a6(A6), a7(A7), a8(A8), 91 d1 (D1), d2(D2), d3(D3), d4(D4), 92 d5 (D5), d6(D6), d7(D7), d8(D8) 93 { 94 clk(TICK_P); 95 SC_CTHREAD( entry, clk.neg() ); 96 } 97 void entry(); 98}; 99 100/******************************************************************************/ 101/*************************** testbench Entry Function **********************/ 102/******************************************************************************/ 103void 104STIM::entry() 105{ 106 107// INITIAL INPUT VALUES 108 109 a1.write(0); // Are quotes necessary ??? 110 a2.write(0); 111 a3.write(0); 112 a4.write(0); 113 a5.write(0); 114 a6.write(0); 115 a7.write(0); 116 a8.write(0); 117 in_ok.write(0); 118 out_ok.write(0); 119 reset.write(1); 120 wait(2); 121 122// REMOVE RESET 123 124 reset.write(0); 125 wait(); 126 127// WAIT FOR REQUEST FOR INPUT 128 129 do { wait(); } while (instrb == 0); 130 131// SEND INPUT DATA TO BE SORTED 132 a1.write(-76); 133 a2.write( 1); 134 a3.write( 12); 135 a4.write( 85); 136 a5.write( 15); 137 a6.write(103); 138 a7.write( -2); 139 a8.write( 3); 140 in_ok.write(1); 141 wait(); 142 143// WAIT FOR OUTPUT READY 144 145 do { wait(); } while (outstrb == 0); 146 147// READ OUTPUT & DISPLAY RESULTS 148 149 cout << "\n" << endl; 150 cout << "\t\t INPUT DATA \t\t SORTED DATA" << endl; 151 cout << "\t\t " << a1.read().to_int() << " \t\t " 152 << d1.read().to_int() << endl; 153 cout << "\t\t " << a2.read().to_int() << " \t\t " 154 << d2.read().to_int() << endl; 155 cout << "\t\t " << a3.read().to_int() << " \t\t " 156 << d3.read().to_int() << endl; 157 cout << "\t\t " << a4.read().to_int() << " \t\t " 158 << d4.read().to_int() << endl; 159 cout << "\t\t " << a5.read().to_int() << " \t\t " 160 << d5.read().to_int() << endl; 161 cout << "\t\t " << a6.read().to_int() << " \t\t " 162 << d6.read().to_int() << endl; 163 cout << "\t\t " << a7.read().to_int() << " \t\t " 164 << d7.read().to_int() << endl; 165 cout << "\t\t " << a8.read().to_int() << " \t\t " 166 << d8.read().to_int() << endl; 167 cout << "\n" << endl; 168 169// SEND FINISHED READING OUTPUT FLAG 170 171 in_ok.write(0); 172 out_ok.write(1); 173 wait(); 174 175// STOP SIMULATION 176 177 sc_stop(); 178} 179