modulo.cpp revision 12855:588919e0e4aa
14484Sbinkertn@umich.edu/***************************************************************************** 24484Sbinkertn@umich.edu 34484Sbinkertn@umich.edu Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 44484Sbinkertn@umich.edu more contributor license agreements. See the NOTICE file distributed 54484Sbinkertn@umich.edu with this work for additional information regarding copyright ownership. 64484Sbinkertn@umich.edu Accellera licenses this file to you under the Apache License, Version 2.0 74484Sbinkertn@umich.edu (the "License"); you may not use this file except in compliance with the 84484Sbinkertn@umich.edu License. You may obtain a copy of the License at 94484Sbinkertn@umich.edu 104484Sbinkertn@umich.edu http://www.apache.org/licenses/LICENSE-2.0 114484Sbinkertn@umich.edu 124484Sbinkertn@umich.edu Unless required by applicable law or agreed to in writing, software 134484Sbinkertn@umich.edu distributed under the License is distributed on an "AS IS" BASIS, 144484Sbinkertn@umich.edu WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 154484Sbinkertn@umich.edu implied. See the License for the specific language governing 164484Sbinkertn@umich.edu permissions and limitations under the License. 174484Sbinkertn@umich.edu 184484Sbinkertn@umich.edu *****************************************************************************/ 194484Sbinkertn@umich.edu 204484Sbinkertn@umich.edu/***************************************************************************** 214484Sbinkertn@umich.edu 224484Sbinkertn@umich.edu modulo.cpp -- 234484Sbinkertn@umich.edu 244484Sbinkertn@umich.edu Original Author: Rocco Jonack, Synopsys, Inc., 1999-05-13 254484Sbinkertn@umich.edu 264484Sbinkertn@umich.edu *****************************************************************************/ 274484Sbinkertn@umich.edu 284484Sbinkertn@umich.edu/***************************************************************************** 294484Sbinkertn@umich.edu 304484Sbinkertn@umich.edu MODIFICATION LOG - modifiers, enter your name, affiliation, date and 314484Sbinkertn@umich.edu changes you are making here. 324484Sbinkertn@umich.edu 334484Sbinkertn@umich.edu Name, Affiliation, Date: 344484Sbinkertn@umich.edu Description of Modification: 354484Sbinkertn@umich.edu 364484Sbinkertn@umich.edu *****************************************************************************/ 374484Sbinkertn@umich.edu 384484Sbinkertn@umich.edu 394484Sbinkertn@umich.edu#include "modulo.h" 404484Sbinkertn@umich.edu 414484Sbinkertn@umich.eduvoid modulo::entry(){ 424484Sbinkertn@umich.edu 434484Sbinkertn@umich.edu int tmp1; 444484Sbinkertn@umich.edu sc_bigint<4> tmp2; 454484Sbinkertn@umich.edu sc_biguint<4> tmp3; 464484Sbinkertn@umich.edu sc_bigint<8> tmp4; 474484Sbinkertn@umich.edu sc_biguint<8> tmp5; 484484Sbinkertn@umich.edu 494484Sbinkertn@umich.edu // reset_loop 504484Sbinkertn@umich.edu if (reset.read() == true) { 514484Sbinkertn@umich.edu out_valid.write(false); 524484Sbinkertn@umich.edu wait(); 534484Sbinkertn@umich.edu } else wait(); 544484Sbinkertn@umich.edu 554484Sbinkertn@umich.edu // 564484Sbinkertn@umich.edu // main loop 574484Sbinkertn@umich.edu // 584484Sbinkertn@umich.edu // 59 while(1) { 60 while(in_valid.read()==false) wait(); 61 wait(); 62 63 //reading the inputs 64 tmp1 = in_value1.read(); 65 tmp2 = in_value2.read(); 66 tmp3 = in_value3.read(); 67 tmp4 = in_value4.read(); 68 tmp5 = in_value5.read(); 69 70 //execute operations 71 tmp1 = tmp1%5; 72 tmp2 = tmp2%5; 73 tmp3 = tmp3%5; 74 tmp4 = tmp4%5; 75 tmp5 = tmp5%5; 76 wait(); 77 78 // write outputs 79 out_value1.write(tmp1); 80 out_value2.write(tmp2); 81 out_value3.write(tmp3); 82 out_value4.write(tmp4); 83 out_value5.write(tmp5); 84 out_valid.write(true); 85 wait(); 86 out_valid.write(false); 87 wait(); 88 //execute self assignment operations 89 tmp1 %= 3; 90 tmp2 %= 3; 91 tmp3 %= 3; 92 tmp4 %= 3; 93 tmp5 %= 3; 94 wait(); 95 96 // write outputs 97 out_value1.write(tmp1); 98 out_value2.write(tmp2); 99 out_value3.write(tmp3); 100 out_value4.write(tmp4); 101 out_value5.write(tmp5); 102 out_valid.write(true); 103 wait(); 104 out_valid.write(false); 105 wait(); 106 //execute different type operations 107 if (tmp3!=0) 108 tmp1 = (tmp2%tmp3).to_int(); 109 if (tmp4!=0) 110 tmp2 = tmp2%tmp4; 111 if (tmp5!=0) 112 tmp3 = tmp3%tmp5; 113 if (tmp5!=0) 114 tmp4 = tmp4%tmp5; 115 wait(); 116 117 // write outputs 118 out_value1.write(tmp1); 119 out_value2.write(tmp2); 120 out_value3.write(tmp3); 121 out_value4.write(tmp4); 122 out_value5.write(tmp5); 123 out_valid.write(true); 124 wait(); 125 out_valid.write(false); 126 wait(); 127 } 128} 129 130// EOF 131 132