summaryrefslogtreecommitdiff
path: root/src/systemc/tests/systemc/datatypes/int/sc_int_base/mixed/test_int.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemc/tests/systemc/datatypes/int/sc_int_base/mixed/test_int.cpp')
-rw-r--r--src/systemc/tests/systemc/datatypes/int/sc_int_base/mixed/test_int.cpp237
1 files changed, 237 insertions, 0 deletions
diff --git a/src/systemc/tests/systemc/datatypes/int/sc_int_base/mixed/test_int.cpp b/src/systemc/tests/systemc/datatypes/int/sc_int_base/mixed/test_int.cpp
new file mode 100644
index 000000000..bcec788a6
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/sc_int_base/mixed/test_int.cpp
@@ -0,0 +1,237 @@
+/*****************************************************************************
+
+ Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
+ more contributor license agreements. See the NOTICE file distributed
+ with this work for additional information regarding copyright ownership.
+ Accellera licenses this file to you under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with the
+ License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied. See the License for the specific language governing
+ permissions and limitations under the License.
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ test_int.cpp --
+
+ Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ MODIFICATION LOG - modifiers, enter your name, affiliation, date and
+ changes you are making here.
+
+ Name, Affiliation, Date:
+ Description of Modification:
+
+ *****************************************************************************/
+
+#include "systemc.h"
+
+
+int sc_main( int ac, char *av[] )
+{
+ sc_int_base a(8),b(8);
+ int x;
+
+
+
+ x = 8;
+ a = 8;
+ sc_assert( x == a);
+
+ cout << "x + a = " << x + a << endl;
+ cout << "++a = " << ++a << endl;
+ cout << "a-- = " << a-- << endl;
+
+ // bit-select on L.H.S.
+ a[0] = 1;
+ cout << "a = " << a << endl;
+
+ // bitselect on R.H.S.
+ cout << "a[3] = " << a[3] << endl;
+
+
+ // part-select on R.H.S
+ cout << "a.range(4,0) = " << a.range(4,0) << endl;
+ cout << "a = " << a << endl;
+
+ sc_int_base c(5);
+ c = a.range(4,0);
+ cout << "c = " << c << endl;
+
+ // part-select on L.H.S.
+ a.range(2,0) = 7;
+ cout << "a = " << a << endl;
+
+ a.range(4,2) = 5;
+ cout << "a = " << a << endl;
+
+ a.range(7,4) = 8;
+ cout << "a = " << a << endl;
+
+ // concat on R.H.S.
+ sc_int_base sx(4);
+ sx = 1;
+ sc_int_base sy(4);
+ sy = 3;
+ a = ( sx, sy );
+
+ cout << "a = " << a << endl;
+
+ sc_int_base sb(8);
+ // concat of part-selects
+ sb = ( a.range(7,4), a.range(3,0) );
+
+ cout << "sb = " << sb << endl;
+
+ ( sx, sy ) = 17;
+
+ cout << "sx = " << sx << endl;
+ cout << "sy = " << sy << endl;
+
+ // concat and part-selects
+ ( sx, sy ) = ( a.range(7,4), a.range(3,0) );
+
+ cout << "sx = " << sx << endl;
+ cout << "sy = " << sy << endl;
+
+ sc_int_base s5(5);
+
+ s5 = ( sx , a[4] );
+
+ cout << "s5 = " << s5 << endl;
+
+ s5 = (a[4],sx);
+ cout << "s5 = " << s5 << endl;
+
+ sc_bv<8> sc8;
+ sc_bv<4> sc4;
+
+ // ( sc8.range(7,4), sc4 ) = 17;
+ ( sc8.range(7,4), sc4 ) = "00010001";
+
+ cout << "sc8 = " << sc8.to_int() << endl;
+ cout << "sc4 = " << sc4.to_int() << endl;
+
+ sc_int_base sia(8);
+
+
+ sc_uint_base u4(4);
+
+ // part-select on sc_uint
+ u4 = sx.range(3,0);
+
+ cout << "u4 = " << u4 << endl;
+
+ u4[3] = sx[0];
+
+ cout << "u4 = " << u4 << endl;
+
+ sx = (u4.range(1,0), u4.range(3,2));
+
+ cout << "sx = " << sx << endl;
+
+ sc_bv<8> bva;
+ sc_lv<8> lva;
+
+ // Mixing bv, lv on the RHS
+
+ bva = "10000000";
+ lva = "10000001";
+
+ b = bva & "1010";
+ cout << "b = " << b << endl;
+
+ // b = lva ^ bva;
+ b = sc_bv<8>( lva ^ bva );
+ cout << "b = " << b << endl;
+
+ //Mixing bv, lv on the LHS
+
+ bva = b;
+ lva = b;
+
+ cout << "bva = " << bva << endl;
+ cout << "lva = " << lva << endl;
+
+ bva = b & lva.to_int();
+
+ cout << "bva = " << bva << endl;
+
+
+ //Mixing sc_signed on LHS
+
+ sc_signed ss8(8);
+ ss8 = b;
+ cout << "ss8 = " << ss8 << endl;
+
+ ss8 = u4;
+ cout << "ss8 = " << ss8 << endl;
+
+ // Mixing sc_signed/sc_unsigned on RHS
+ sc_unsigned su8(8);
+
+ su8 = 8;
+ b = su8 + 1;
+
+ cout << "b = " << b << endl;
+
+ b = ss8 * su8;
+ b = ss8 ^ su8;
+ su8 = bva.to_int() | ss8;
+
+ cout << "b = " << b << endl;
+
+ // Having more than two concats
+
+ sc_int_base ai2(2);
+ sc_int_base bi4(4);
+ sc_int_base ci2(2);
+ sc_int_base di2(2);
+ sc_int_base ei8(8);
+ sc_int_base ei10(10);
+
+ ai2 = 2;
+ bi4 = 2;
+ ci2 = 2;
+ di2 = 2;
+
+ ei8 = (ai2, bi4, ci2 );
+
+ cout << "ei8 = " << ei8 << endl;
+
+ ei10 = (ai2, bi4, ci2 , di2);
+
+ cout << "ei10 = " << ei10 << endl;
+
+ // bit-true behavior
+ sc_int_base bs4(4);
+ sc_signed ds4(4);
+
+ bs4[3] = 1;
+ bs4[2] = 0;
+ bs4[1] = 0;
+ bs4[0] = 0;
+
+ ds4[3] = 1;
+ ds4[2] = 0;
+ ds4[1] = 0;
+ ds4[0] = 0;
+
+
+ cout << "bs4 = " << bs4 << endl;
+ cout << "ds4 = " << ds4 << endl;
+
+ return 0;
+
+}