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