inlining.cpp revision 12855:588919e0e4aa
113521Sgabeblack@google.com/*****************************************************************************
213521Sgabeblack@google.com
313521Sgabeblack@google.com  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
413521Sgabeblack@google.com  more contributor license agreements.  See the NOTICE file distributed
513521Sgabeblack@google.com  with this work for additional information regarding copyright ownership.
613521Sgabeblack@google.com  Accellera licenses this file to you under the Apache License, Version 2.0
713521Sgabeblack@google.com  (the "License"); you may not use this file except in compliance with the
813521Sgabeblack@google.com  License.  You may obtain a copy of the License at
913521Sgabeblack@google.com
1013521Sgabeblack@google.com    http://www.apache.org/licenses/LICENSE-2.0
1113521Sgabeblack@google.com
1213521Sgabeblack@google.com  Unless required by applicable law or agreed to in writing, software
1313521Sgabeblack@google.com  distributed under the License is distributed on an "AS IS" BASIS,
1413521Sgabeblack@google.com  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1513521Sgabeblack@google.com  implied.  See the License for the specific language governing
1613521Sgabeblack@google.com  permissions and limitations under the License.
1713521Sgabeblack@google.com
1813521Sgabeblack@google.com *****************************************************************************/
1913521Sgabeblack@google.com
2013521Sgabeblack@google.com/*****************************************************************************
2113521Sgabeblack@google.com
2213521Sgabeblack@google.com  inlining.cpp --
2313521Sgabeblack@google.com
2413521Sgabeblack@google.com  Original Author: Rocco Jonack, Synopsys, Inc., 1999-07-30
2513521Sgabeblack@google.com
2613521Sgabeblack@google.com *****************************************************************************/
2713521Sgabeblack@google.com
2813521Sgabeblack@google.com/*****************************************************************************
2913521Sgabeblack@google.com
3013521Sgabeblack@google.com  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
3113521Sgabeblack@google.com  changes you are making here.
3213521Sgabeblack@google.com
3313521Sgabeblack@google.com      Name, Affiliation, Date:
3413521Sgabeblack@google.com  Description of Modification:
3513521Sgabeblack@google.com
3613521Sgabeblack@google.com *****************************************************************************/
3713521Sgabeblack@google.com
3813521Sgabeblack@google.com
3913521Sgabeblack@google.com#include "inlining.h"
4013521Sgabeblack@google.com
4113521Sgabeblack@google.com// list of defines
4213521Sgabeblack@google.com#define clock(a) wait(a)
4313521Sgabeblack@google.com#define intu4(a) sc_biguint<4>  a;
4413521Sgabeblack@google.com#define vec4(a) sc_lv<4>  a;
4513521Sgabeblack@google.com#define my_case(a, b, c)   switch (a) {     \
4613521Sgabeblack@google.com                             case 0:       \
4713521Sgabeblack@google.com                             case 1:       \
4813521Sgabeblack@google.com                             case 2:       \
4913521Sgabeblack@google.com                             case 3:       \
5013521Sgabeblack@google.com                               b = 0;      \
5113521Sgabeblack@google.com                               break;      \
5213521Sgabeblack@google.com                             default :     \
5313521Sgabeblack@google.com                               b = c;      \
5413521Sgabeblack@google.com                               break;      \
5513521Sgabeblack@google.com                           };
5613521Sgabeblack@google.com#define my_wait_case(a, b, c)  switch (a) { \
5713521Sgabeblack@google.com                                 case 0:   \
5813521Sgabeblack@google.com                                 case 1:   \
5913521Sgabeblack@google.com                                 case 2:   \
6013521Sgabeblack@google.com                                 case 3:   \
6113521Sgabeblack@google.com                                   b = 0;  \
6213521Sgabeblack@google.com                                   wait(); \
6313521Sgabeblack@google.com                                   break;  \
6413521Sgabeblack@google.com                                 default : \
6513521Sgabeblack@google.com                                   b = c;  \
6613521Sgabeblack@google.com                                   wait(); \
6713521Sgabeblack@google.com                                   break;  \
6813521Sgabeblack@google.com                               };
6913521Sgabeblack@google.com
7013521Sgabeblack@google.comvoid inlining::entry(){
7113521Sgabeblack@google.com
7213521Sgabeblack@google.com  int tmp1;
7313521Sgabeblack@google.com  int tmp2;
7413521Sgabeblack@google.com  vec4(tmp3);
7513521Sgabeblack@google.com  sc_bv<4>  tmp4;
7613521Sgabeblack@google.com
7713521Sgabeblack@google.com  // reset_loop
7813521Sgabeblack@google.com    if (reset.read() == true) {
7913521Sgabeblack@google.com      out_value1.write(0);
8013521Sgabeblack@google.com      out_value2.write(0);
8113521Sgabeblack@google.com      out_valid.write(false);
8213521Sgabeblack@google.com      clock(1);
8313521Sgabeblack@google.com    } else clock(1);
8413521Sgabeblack@google.com
8513521Sgabeblack@google.com  //
8613521Sgabeblack@google.com  // main loop
8713521Sgabeblack@google.com  //
8813521Sgabeblack@google.com  while(1) {
8913521Sgabeblack@google.com    do { wait(); } while  (in_valid == false);
9013521Sgabeblack@google.com
9113521Sgabeblack@google.com    //reading inputs
9213521Sgabeblack@google.com    tmp1 = in_value1.read().to_int();
9313521Sgabeblack@google.com    tmp2 = in_value2.read().to_int();
9413521Sgabeblack@google.com    tmp3 = in_value3.read();
9513521Sgabeblack@google.com    tmp4 = in_value4.read();
9613521Sgabeblack@google.com
9713521Sgabeblack@google.com    //execution
9813521Sgabeblack@google.com    my_wait_case(tmp1, tmp3, tmp4);
9913521Sgabeblack@google.com    out_value1.write(tmp3);
10013521Sgabeblack@google.com    clock(1);
10113521Sgabeblack@google.com
10213521Sgabeblack@google.com    my_case(tmp2, tmp3, tmp4);
10313521Sgabeblack@google.com    out_value2.write(tmp4);
10413521Sgabeblack@google.com    out_valid.write(true);
10513521Sgabeblack@google.com    clock(1);
10613521Sgabeblack@google.com    out_valid.write(false);
10713521Sgabeblack@google.com
10813521Sgabeblack@google.com  }
10913521Sgabeblack@google.com}
11013521Sgabeblack@google.com
11113521Sgabeblack@google.com// EOF
11213521Sgabeblack@google.com
11313521Sgabeblack@google.com