112855Sgabeblack@google.com/***************************************************************************** 212855Sgabeblack@google.com 312855Sgabeblack@google.com Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 412855Sgabeblack@google.com more contributor license agreements. See the NOTICE file distributed 512855Sgabeblack@google.com with this work for additional information regarding copyright ownership. 612855Sgabeblack@google.com Accellera licenses this file to you under the Apache License, Version 2.0 712855Sgabeblack@google.com (the "License"); you may not use this file except in compliance with the 812855Sgabeblack@google.com License. You may obtain a copy of the License at 912855Sgabeblack@google.com 1012855Sgabeblack@google.com http://www.apache.org/licenses/LICENSE-2.0 1112855Sgabeblack@google.com 1212855Sgabeblack@google.com Unless required by applicable law or agreed to in writing, software 1312855Sgabeblack@google.com distributed under the License is distributed on an "AS IS" BASIS, 1412855Sgabeblack@google.com WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1512855Sgabeblack@google.com implied. See the License for the specific language governing 1612855Sgabeblack@google.com permissions and limitations under the License. 1712855Sgabeblack@google.com 1812855Sgabeblack@google.com *****************************************************************************/ 1912855Sgabeblack@google.com 2012855Sgabeblack@google.com/***************************************************************************** 2112855Sgabeblack@google.com 2212855Sgabeblack@google.com test.cpp -- 2312855Sgabeblack@google.com 2412855Sgabeblack@google.com Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15 2512855Sgabeblack@google.com 2612855Sgabeblack@google.com *****************************************************************************/ 2712855Sgabeblack@google.com 2812855Sgabeblack@google.com/***************************************************************************** 2912855Sgabeblack@google.com 3012855Sgabeblack@google.com MODIFICATION LOG - modifiers, enter your name, affiliation, date and 3112855Sgabeblack@google.com changes you are making here. 3212855Sgabeblack@google.com 3312855Sgabeblack@google.com Name, Affiliation, Date: 3412855Sgabeblack@google.com Description of Modification: 3512855Sgabeblack@google.com 3612855Sgabeblack@google.com *****************************************************************************/ 3712855Sgabeblack@google.com 3812855Sgabeblack@google.com// 3912855Sgabeblack@google.com// Verifies the functionality of concanetation operation. 4012855Sgabeblack@google.com// Operands form the rvalue of an assignment 4112855Sgabeblack@google.com// 4212855Sgabeblack@google.com// Author: PRP 4312855Sgabeblack@google.com// Date Created: 19 Feb 99 4412855Sgabeblack@google.com// 4512855Sgabeblack@google.com 4612855Sgabeblack@google.com 4712855Sgabeblack@google.com#include "systemc.h" 4812855Sgabeblack@google.com#include "test.h" 4912855Sgabeblack@google.com 5012855Sgabeblack@google.comvoid test::entry() 5112855Sgabeblack@google.com{ 5212855Sgabeblack@google.com sc_lv<8> a; 5312855Sgabeblack@google.com sc_lv<8> b; 5412855Sgabeblack@google.com sc_lv<8> c; 5512855Sgabeblack@google.com sc_lv<8> d; 5612855Sgabeblack@google.com sc_lv<24> e; 5712855Sgabeblack@google.com sc_lv<24> f; 5812855Sgabeblack@google.com 5912855Sgabeblack@google.com sc_logic k; 6012855Sgabeblack@google.com sc_logic n; 6112855Sgabeblack@google.com sc_logic m; 6212855Sgabeblack@google.com 6312855Sgabeblack@google.com sc_lv<32> x; 6412855Sgabeblack@google.com sc_lv<32> y; 6512855Sgabeblack@google.com sc_lv<32> z; 6612855Sgabeblack@google.com 6712855Sgabeblack@google.com sc_lv<2> kk; 6812855Sgabeblack@google.com 6912855Sgabeblack@google.com int i,j; 7012855Sgabeblack@google.com 7112855Sgabeblack@google.com while (true) { 7212855Sgabeblack@google.com 7312855Sgabeblack@google.com wait (); 7412855Sgabeblack@google.com 7512855Sgabeblack@google.com // ------- rvalue --------------------------------------------- 7612855Sgabeblack@google.com 7712855Sgabeblack@google.com a = "00000000"; // 0 7812855Sgabeblack@google.com b = "00000001"; // 1 7912855Sgabeblack@google.com c = "00000011"; // 3 8012855Sgabeblack@google.com d = "00001111"; // 15 8112855Sgabeblack@google.com e = "000000000000000000000001"; // 1 8212855Sgabeblack@google.com f = "000000000000000000001010"; // 10 8312855Sgabeblack@google.com 8412855Sgabeblack@google.com // =============== Array + Array ==================================== 8512855Sgabeblack@google.com // array constant + array constant 8612855Sgabeblack@google.com x = ( sc_lv_base( "000000000000000000000000" ), "00010000"); // x = 32 8712855Sgabeblack@google.com 8812855Sgabeblack@google.com // array constant + array variable 8912855Sgabeblack@google.com y = ("000000000000000000000000", b); // y = 1 9012855Sgabeblack@google.com z = x | y; // z = 00000000 00000000 00000000 00010001 9112855Sgabeblack@google.com 9212855Sgabeblack@google.com // array variable + array constant 9312855Sgabeblack@google.com x = (a, "000000000000000000000011"); // x = 3 9412855Sgabeblack@google.com z = z & x; // z = 00000000 00000000 00000000 00000001 9512855Sgabeblack@google.com 9612855Sgabeblack@google.com // array variable + array variable 9712855Sgabeblack@google.com x = (a, f); // x = 10 9812855Sgabeblack@google.com z = z | x; // z = 00000000 00000000 00000000 00001011 9912855Sgabeblack@google.com 10012855Sgabeblack@google.com // =============== Cascading ==================================== 10112855Sgabeblack@google.com // cascading array variables 10212855Sgabeblack@google.com x = (a, b, c, d); // x = 00000000 00000001 00000011 00001111 10312855Sgabeblack@google.com z = z & x; // z = 00000000 00000000 00000000 00001011 10412855Sgabeblack@google.com 10512855Sgabeblack@google.com // cascading array constants 10612855Sgabeblack@google.com x = ( sc_lv_base( "00000011" ), "00000011", "00000011", "00000011"); 10712855Sgabeblack@google.com // x = 00000011 00000011 00000011 00000011 10812855Sgabeblack@google.com z = z | x; // z = 00000011 00000011 00000011 00001011 10912855Sgabeblack@google.com 11012855Sgabeblack@google.com // composing array concats 11112855Sgabeblack@google.com x = ( sc_lv_base( "00000011" ), ( sc_lv_base( "11111111" ), "00000011", "00000011")); 11212855Sgabeblack@google.com // x = 00000011 11111111 00000011 00000011 11312855Sgabeblack@google.com z = z | x; // z = 00000011 11111111 00000011 00001011 11412855Sgabeblack@google.com 11512855Sgabeblack@google.com // =============== Array (variable) + Scalar ============================== 11612855Sgabeblack@google.com // array variable + scalar constant 11712855Sgabeblack@google.com m = '0'; 11812855Sgabeblack@google.com n = '1'; 11912855Sgabeblack@google.com x = (a, b, c, d.range (6, 0), m); 12012855Sgabeblack@google.com // x = 00000000 00000001 00000011 00011110 12112855Sgabeblack@google.com z = z | x; // z = 00000011 11111111 00000011 00011111 12212855Sgabeblack@google.com 12312855Sgabeblack@google.com k = '1'; 12412855Sgabeblack@google.com // array variable + scalar variable 12512855Sgabeblack@google.com x = (a, b, k, c.range (6, 0), x.range (7, 0)); 12612855Sgabeblack@google.com // x = 00000000 00000001 10000001 00011110 12712855Sgabeblack@google.com z = z & x; // z = 00000000 00000001 00000001 00011110 12812855Sgabeblack@google.com 12912855Sgabeblack@google.com // =============== Null Vector ==================================== 13012855Sgabeblack@google.com // null vector - variable 13112855Sgabeblack@google.com kk = ~( sc_lv_base( k ), k); // "00" 13212855Sgabeblack@google.com z = (z.range (31, 2), kk); // z = 00000000 00000001 00000001 00011100 13312855Sgabeblack@google.com 13412855Sgabeblack@google.com // null vector - constant 13512855Sgabeblack@google.com kk = ( sc_lv_base( n ), n); // "11" 13612855Sgabeblack@google.com z = (kk, z.range (29, 0)); // z = 11000000 00000001 00000001 00011100 13712855Sgabeblack@google.com 13812855Sgabeblack@google.com // =============== Array (constant) + Scalar ============================== 13912855Sgabeblack@google.com // scalar constant + array constant 14012855Sgabeblack@google.com x = ( sc_lv_base( n ), "1111111000000000000000000000011"); 14112855Sgabeblack@google.com // x = 01111111 00000000 00000000 00000011 14212855Sgabeblack@google.com z = z | x; // z = 11111111 00000001 00000001 00011111 14312855Sgabeblack@google.com 14412855Sgabeblack@google.com // array constant + scalar variable 14512855Sgabeblack@google.com x = ( sc_lv_base( "1111111000000000000000000000011" ), k); 14612855Sgabeblack@google.com // x = 11111110 00000000 00000000 00000111 14712855Sgabeblack@google.com z = z & x; // z = 11111110 00000000 00000000 00000111 14812855Sgabeblack@google.com 14912855Sgabeblack@google.com // =============== LHS/RHS of different widths ============================== 15012855Sgabeblack@google.com // lhs and rhs of different widths 15112855Sgabeblack@google.com x = "100001111000000000000000000001111"; // warning should be issued 15212855Sgabeblack@google.com z = z & x; 15312855Sgabeblack@google.com // z = 00001110 00000000 00000000 00000111 15412855Sgabeblack@google.com 15512855Sgabeblack@google.com o1 = z.to_int(); 15612855Sgabeblack@google.com wait(); 15712855Sgabeblack@google.com 15812855Sgabeblack@google.com } 15912855Sgabeblack@google.com} 16012855Sgabeblack@google.com 161