summaryrefslogtreecommitdiff
path: root/src/systemc/tests/systemc/misc/synth/concat/lvalue/test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemc/tests/systemc/misc/synth/concat/lvalue/test.cpp')
-rw-r--r--src/systemc/tests/systemc/misc/synth/concat/lvalue/test.cpp131
1 files changed, 131 insertions, 0 deletions
diff --git a/src/systemc/tests/systemc/misc/synth/concat/lvalue/test.cpp b/src/systemc/tests/systemc/misc/synth/concat/lvalue/test.cpp
new file mode 100644
index 000000000..e20874af6
--- /dev/null
+++ b/src/systemc/tests/systemc/misc/synth/concat/lvalue/test.cpp
@@ -0,0 +1,131 @@
+/*****************************************************************************
+
+ 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.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:
+
+ *****************************************************************************/
+
+//
+// Verifies the functionality of concanetation operation.
+// Operands form the rvalue of an assignment
+//
+// Author: PRP
+// Date Created: 19 Feb 99
+//
+
+
+#include "systemc.h"
+#include "test.h"
+
+void test::entry()
+{
+ sc_lv<8> a;
+ sc_lv<8> b;
+ sc_lv<8> c;
+ sc_lv<8> d;
+ sc_lv<24> e;
+ sc_lv<24> f;
+
+ // sc_logic k;
+ // sc_logic n;
+ // sc_logic m, o, p, q, r, s, t, u;
+ sc_lv<1> k, n, m, o, p, q, r, s, t, u;
+
+ sc_lv<32> x;
+ sc_lv<32> y;
+ sc_lv<32> z;
+
+ int i,j;
+
+ while (true) {
+
+ wait ();
+
+
+ b = "00000001"; // 1
+ c = "00000011"; // 3
+ d = "00001111"; // 15
+
+ // =============== Array + Array ====================================
+
+ (a, f) = "00000000000000000000000000000011"; // a = 0, f = 3
+
+ // =============== Cascading ====================================
+ // cascading array variables
+ (a, f) = (b, c, d, a);
+ // a = 00000001 f = "00000011 00001111 00000000"
+ z = (a, f);
+
+ // composing cascaded array variables
+ x = ( sc_lv_base( "00000011" ), "00000011", "00000011", "00000101");
+ (a, (b, c, d)) = x;
+ z = z | x; // z = 00000011 00000011 00001111 00000101
+
+ // =============== Array (variable) + Scalar ==============================
+
+ (b, c, d, a.range (7, 2), k, n) = (a, b, c, d);
+ // b = 00000011 c = 00000011 d = 00000011 a = 00000111
+ // k = 0 n = 1
+ z = z | (a, b, c, d); // z = 00000111 00000011 00001111 00000111
+
+ ( k, m, a.range (5, 0)) = z.range (15, 8);
+ // k = 0 m = 0 a = 00001111
+ z = z | ( sc_lv_base( n ), m, k, n, "0000", a, "0000000000000000");
+ // z = 10010111 00001111 00001111 00000111
+
+ // =============== Null Vector ====================================
+
+ ( m, n, o, p, q, r, s, t ) = "11011010";
+ a = ( sc_lv_base( s ), t, q, r, o, m, n, p); // a = "10100111"
+ z = (z.range (31, 8), a); // z = 10010111 00001111 00001111 10100111
+
+ b = "00000000";
+
+ z = z | (b, b, b, z.range (7, 0));
+
+ // =============== LHS/RHS of different widths ==============================
+
+ (x.range (15, 0), x.range (31, 16)) = ("1001011100001111000011111010011101");
+ // RHS is (z, "01")
+ // x = 00111110 10011101 01011100 00111100
+
+ (z.range (31, 16), z.range (15, 0)) = (x.range (7, 0), x.range (23, 16),
+ x.range (15, 8), x.range (31, 24));
+ // z = 00111100 10011101 01011100 00111110
+
+ o1 = z.to_int();
+ wait();
+
+ }
+}
+