datatypes.cpp revision 12855
112870Sgabeblack@google.com/*****************************************************************************
212870Sgabeblack@google.com
312870Sgabeblack@google.com  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412870Sgabeblack@google.com  more contributor license agreements.  See the NOTICE file distributed
512870Sgabeblack@google.com  with this work for additional information regarding copyright ownership.
612870Sgabeblack@google.com  Accellera licenses this file to you under the Apache License, Version 2.0
712870Sgabeblack@google.com  (the "License"); you may not use this file except in compliance with the
812870Sgabeblack@google.com  License.  You may obtain a copy of the License at
912870Sgabeblack@google.com
1012870Sgabeblack@google.com    http://www.apache.org/licenses/LICENSE-2.0
1112870Sgabeblack@google.com
1212870Sgabeblack@google.com  Unless required by applicable law or agreed to in writing, software
1312870Sgabeblack@google.com  distributed under the License is distributed on an "AS IS" BASIS,
1412870Sgabeblack@google.com  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512870Sgabeblack@google.com  implied.  See the License for the specific language governing
1612870Sgabeblack@google.com  permissions and limitations under the License.
1712870Sgabeblack@google.com
1812870Sgabeblack@google.com *****************************************************************************/
1912870Sgabeblack@google.com
2012870Sgabeblack@google.com/*****************************************************************************
2112870Sgabeblack@google.com
2212870Sgabeblack@google.com  datatypes.cpp --
2312870Sgabeblack@google.com
2412870Sgabeblack@google.com  Original Author: Rocco Jonack, Synopsys, Inc., 1999-07-22
2512870Sgabeblack@google.com
2612870Sgabeblack@google.com *****************************************************************************/
2712870Sgabeblack@google.com
2812870Sgabeblack@google.com/*****************************************************************************
2912870Sgabeblack@google.com
3012870Sgabeblack@google.com  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
3113082Sgabeblack@google.com  changes you are making here.
3212870Sgabeblack@google.com
3312870Sgabeblack@google.com      Name, Affiliation, Date:
3412870Sgabeblack@google.com  Description of Modification:
3512870Sgabeblack@google.com
3612870Sgabeblack@google.com *****************************************************************************/
3712870Sgabeblack@google.com
3812870Sgabeblack@google.com
3912870Sgabeblack@google.com#include "datatypes.h"
4012870Sgabeblack@google.com
4112870Sgabeblack@google.comvoid datatypes::entry() {
4212870Sgabeblack@google.com
4312870Sgabeblack@google.com  sc_biguint<4>   tmp1;
4412870Sgabeblack@google.com  sc_bigint<4>    tmp2;
4513082Sgabeblack@google.com  sc_lv<4>        tmp3;
4613082Sgabeblack@google.com  sc_bv<4>        tmp4;
4713082Sgabeblack@google.com
4813082Sgabeblack@google.com  // reset_loop
4913082Sgabeblack@google.com    if (reset.read() == true) {
5013082Sgabeblack@google.com      out_value1.write(0);
5113082Sgabeblack@google.com      out_value2.write(0);
5213082Sgabeblack@google.com      out_value3.write(0);
5313082Sgabeblack@google.com      out_value4.write(0);
5413082Sgabeblack@google.com      out_valid.write(false);
5513082Sgabeblack@google.com      wait();
56    } else wait();
57
58  //
59  // main loop
60  //
61  while(1) {
62    do { wait(); } while  (in_valid == false);
63
64    // reading inputs
65    tmp1 = in_value1.read();
66    tmp2 = in_value2.read();
67    tmp3 = in_value3.read();
68    tmp4 = in_value4.read();
69
70    // checking if condition on a range of bits
71    if (tmp1.range(1,3) == 4) {
72	out_value1.write(3);
73    } else if (tmp1.range(3,1) == 4) {
74	out_value1.write(2);
75    } else {
76	out_value1.write(tmp1);
77    };
78    wait();
79
80    // checking if condition on bit part
81    if (tmp2[2]) {
82      out_value2.write(3);
83    } else if ((bool)tmp1[1]==true) {
84	out_value2.write(2);
85    } else {
86      out_value2.write(tmp2);
87    };
88    wait();
89
90    // checking if condition on a range of bits in complex condition
91    if (tmp3.range(1,3)=="000" || ((tmp3.range(3,1).to_uint()!=4) &&
92	tmp3.range(3,1).to_uint()!=5 && tmp3.range(3,1).to_uint()!=6 &&
93	tmp3.range(3,1).to_uint()!=7)) {
94      out_value3.write(1);
95    } else {
96      out_value3.write(tmp3);
97    };
98
99   // checking if condition on a range of bits in complex condition
100   // on signal reads inside condition
101    if (in_value4.read().range(1,3)=="000" ||
102	(in_value4.read().range(3,1).to_uint()!=4 &&
103	 in_value4.read().range(3,1).to_uint()!=5 &&
104	 in_value4.read().range(3,1).to_uint()!=6 &&
105	 in_value4.read().range(3,1).to_uint()!=7)) {
106      out_value4.write(1);
107    } else {
108      out_value4.write(tmp4);
109    };
110
111    out_valid.write(true);
112    wait();
113    out_valid.write(false);
114
115  }
116}
117
118// EOF
119
120