subtract.cpp 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  subtract.cpp --
23
24  Original Author: Rocco Jonack, Synopsys, Inc., 1999-07-30
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#include "subtract.h"
40
41void subtraction::entry(){
42
43  int             tmp1;
44  sc_bigint<4>    tmp2;
45  sc_biguint<4>   tmp3;
46  sc_bigint<8>    tmp4;
47  sc_biguint<8>   tmp5;
48
49  // reset_loop
50  if (reset.read() == true) {
51    out_valid.write(false);
52    wait();
53  } else wait();
54
55  //
56  // main loop
57  //
58  //
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 - 1;
72    tmp2 = tmp2 - 1;
73    tmp3 = tmp3 - 1;
74    tmp4 = tmp4 - 1;
75    tmp5 = tmp5 - 1;
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    // write outputs
89    out_value1.write(tmp1--);
90    out_value2.write(tmp2--);
91    out_value3.write(tmp3--);
92    out_value4.write(tmp4--);
93    out_value5.write(tmp5--);
94    out_valid.write(true);
95    wait();
96    out_valid.write(false);
97    wait();
98    // write outputs
99    out_value1.write(--tmp1);
100    out_value2.write(--tmp2);
101    out_value3.write(--tmp3);
102    out_value4.write(--tmp4);
103    out_value5.write(--tmp5);
104    out_valid.write(true);
105    wait();
106    out_valid.write(false);
107    wait();
108    //execute operations
109    tmp1 = tmp1 - 254;
110    tmp2 = tmp2 - 14;
111    tmp3 = tmp3 - 14;
112    tmp4 = tmp4 - 254;
113    tmp5 = tmp5 - 254;
114    wait();
115
116    // write outputs
117    out_value1.write(tmp1);
118    out_value2.write(tmp2);
119    out_value3.write(tmp3);
120    out_value4.write(tmp4);
121    out_value5.write(tmp5);
122    out_valid.write(true);
123    wait();
124    out_valid.write(false);
125    wait();
126    //execute operations
127    tmp1 -= 254;
128    tmp2 -= 14;
129    tmp3 -= 14;
130    tmp4 -= 254;
131    tmp5 -= 254;
132    wait();
133
134    // write outputs
135    out_value1.write(tmp1);
136    out_value2.write(tmp2);
137    out_value3.write(tmp3);
138    out_value4.write(tmp4);
139    out_value5.write(tmp5);
140    out_valid.write(true);
141    wait();
142    out_valid.write(false);
143    wait();
144    //execute operations with signed and unsigned mix and mixed bit width
145    tmp1 = (tmp3 - tmp2).to_int();
146    tmp2 = tmp2 - tmp4;
147    tmp3 = tmp3 - tmp5;
148    tmp4 = tmp4 - tmp5;
149    tmp5 = tmp4 - tmp5;
150    wait();
151
152    // write outputs
153    out_value1.write(tmp1);
154    out_value2.write(tmp2);
155    out_value3.write(tmp3);
156    out_value4.write(tmp4);
157    out_value5.write(tmp5);
158    out_valid.write(true);
159    wait();
160    out_valid.write(false);
161    wait();
162  }
163}
164
165// EOF
166
167