test08.cpp revision 12855:588919e0e4aa
17087Snate@binkert.org/*****************************************************************************
27087Snate@binkert.org
37087Snate@binkert.org  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
47087Snate@binkert.org  more contributor license agreements.  See the NOTICE file distributed
57087Snate@binkert.org  with this work for additional information regarding copyright ownership.
67087Snate@binkert.org  Accellera licenses this file to you under the Apache License, Version 2.0
77087Snate@binkert.org  (the "License"); you may not use this file except in compliance with the
87087Snate@binkert.org  License.  You may obtain a copy of the License at
97087Snate@binkert.org
107087Snate@binkert.org    http://www.apache.org/licenses/LICENSE-2.0
117087Snate@binkert.org
127087Snate@binkert.org  Unless required by applicable law or agreed to in writing, software
134158Sgblack@eecs.umich.edu  distributed under the License is distributed on an "AS IS" BASIS,
144158Sgblack@eecs.umich.edu  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
154158Sgblack@eecs.umich.edu  implied.  See the License for the specific language governing
164158Sgblack@eecs.umich.edu  permissions and limitations under the License.
174158Sgblack@eecs.umich.edu
184158Sgblack@eecs.umich.edu *****************************************************************************/
194158Sgblack@eecs.umich.edu
204158Sgblack@eecs.umich.edu/*****************************************************************************
214158Sgblack@eecs.umich.edu
224158Sgblack@eecs.umich.edu  test08.cpp --
234158Sgblack@eecs.umich.edu
244158Sgblack@eecs.umich.edu  Original Author: Andy Goodrich, Forte Design Systems, 9 November 2007
254158Sgblack@eecs.umich.edu
264158Sgblack@eecs.umich.edu *****************************************************************************/
274158Sgblack@eecs.umich.edu
284158Sgblack@eecs.umich.edu/*****************************************************************************
294158Sgblack@eecs.umich.edu
304158Sgblack@eecs.umich.edu  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
314158Sgblack@eecs.umich.edu  changes you are making here.
324158Sgblack@eecs.umich.edu
334158Sgblack@eecs.umich.edu      Name, Affiliation, Date:
344158Sgblack@eecs.umich.edu  Description of Modification:
354158Sgblack@eecs.umich.edu
364158Sgblack@eecs.umich.edu *****************************************************************************/
374158Sgblack@eecs.umich.edu
384158Sgblack@eecs.umich.edu// test concatenation uses that were reported not to work with SystemC 2.1.v1
394158Sgblack@eecs.umich.edu
404158Sgblack@eecs.umich.edu#include "systemc.h"
414158Sgblack@eecs.umich.edu
424158Sgblack@eecs.umich.eduint sc_main(int argc, char* argv[])
434323Sgblack@eecs.umich.edu{
444323Sgblack@eecs.umich.edu    {
454158Sgblack@eecs.umich.edu	    sc_uint<2> a = 1;
464158Sgblack@eecs.umich.edu	    sc_uint<2> b = 2;
474323Sgblack@eecs.umich.edu		sc_uint<10> f = 0 - (a,b);
484323Sgblack@eecs.umich.edu
494323Sgblack@eecs.umich.edu		// subtraction of a concat from 0.
504323Sgblack@eecs.umich.edu
514158Sgblack@eecs.umich.edu		if ( f != 0x3fa )
524158Sgblack@eecs.umich.edu		{
538229Snate@binkert.org			cout << __FILE__ << " " << __LINE__ << ": expected " << 0x3fa
544158Sgblack@eecs.umich.edu			     << " actual " << f << dec << endl;
554158Sgblack@eecs.umich.edu		}
567965Sgblack@eecs.umich.edu
575786Sgblack@eecs.umich.edu	    // subtraction of a concat from a concat if left < right.
585083Sgblack@eecs.umich.edu
594679Sgblack@eecs.umich.edu		f = (a,b) -  (b,a);
606516Sgblack@eecs.umich.edu		if ( f != 0x3fd )
614679Sgblack@eecs.umich.edu		{
624679Sgblack@eecs.umich.edu			cout << __FILE__ << " " << __LINE__ << ": expected " << 0x3fd
638229Snate@binkert.org			     << " actual " << f << dec << endl;
644158Sgblack@eecs.umich.edu		}
656329Sgblack@eecs.umich.edu
664528Sgblack@eecs.umich.edu    }
674158Sgblack@eecs.umich.edu	{ // multiplication times a negative integer.
684158Sgblack@eecs.umich.edu
694158Sgblack@eecs.umich.edu		sc_uint<4> a = 10;
704616Sgblack@eecs.umich.edu		int        b = 0xdd6283e4;
716345Sgblack@eecs.umich.edu	    sc_uint<2> c = 1;
726345Sgblack@eecs.umich.edu		sc_uint<40> e("0xfc7c016528");
734158Sgblack@eecs.umich.edu		sc_uint<40> f = (c,a)*b;
744158Sgblack@eecs.umich.edu		if ( f != e )
754158Sgblack@eecs.umich.edu        {
767629Sgblack@eecs.umich.edu			cout << __FILE__ << " " << __LINE__ << ": expected " << hex << e
777629Sgblack@eecs.umich.edu			     << " actual " << f << dec << endl;
787629Sgblack@eecs.umich.edu		}
798229Snate@binkert.org	}
808229Snate@binkert.org
815912Sgblack@eecs.umich.edu    { // divsion where dividend negative and of type int/long
828229Snate@binkert.org		sc_uint<4> a = 14;
834158Sgblack@eecs.umich.edu		int        b = 0xb292b9fe;
845425Sgblack@eecs.umich.edu        sc_uint<2> c = 3;
854158Sgblack@eecs.umich.edu		sc_uint<50> e = b / sc_biguint<6>(0x3e);
864158Sgblack@eecs.umich.edu        sc_uint<50> f = b / (c,a);
874158Sgblack@eecs.umich.edu
884158Sgblack@eecs.umich.edu		if ( f != e )
894158Sgblack@eecs.umich.edu        {
904158Sgblack@eecs.umich.edu			cout << __FILE__ << " " << __LINE__ << ": expected " << hex << e
914158Sgblack@eecs.umich.edu			     << " actual " << f << dec << endl;
924158Sgblack@eecs.umich.edu		}
934158Sgblack@eecs.umich.edu
944158Sgblack@eecs.umich.edu	}
954158Sgblack@eecs.umich.edu	{ // modulo for negative int % concat
964158Sgblack@eecs.umich.edu
974158Sgblack@eecs.umich.edu	    sc_uint<4> a = 10;
984158Sgblack@eecs.umich.edu		int        b = 0xbb6283e4;
994158Sgblack@eecs.umich.edu		sc_uint<2> c = 1;
1004158Sgblack@eecs.umich.edu		sc_uint<50> e = b % sc_biguint<6>(0x1a);
1014158Sgblack@eecs.umich.edu		sc_uint<50> f = b %(c,a);
1024158Sgblack@eecs.umich.edu		if ( f != e )
1034158Sgblack@eecs.umich.edu        {
1044158Sgblack@eecs.umich.edu			cout << __FILE__ << " " << __LINE__ << ": expected " << hex << e
1054158Sgblack@eecs.umich.edu			     << " actual " << f << dec << endl;
1064158Sgblack@eecs.umich.edu		}
1074158Sgblack@eecs.umich.edu	}
1084158Sgblack@eecs.umich.edu
1098229Snate@binkert.org	{ // Bitwise or and xor, when operands are concat and unsigned int
1104158Sgblack@eecs.umich.edu
1114158Sgblack@eecs.umich.edu		sc_uint<4> a = 6;
1128229Snate@binkert.org		unsigned int b = 0xcc6690e6;
1135659Sgblack@eecs.umich.edu		sc_uint<2> c = 3;
1146336Sgblack@eecs.umich.edu		sc_uint<34> e;
1155118Sgblack@eecs.umich.edu		sc_uint<34> f;
1164158Sgblack@eecs.umich.edu		e = b | 0x36;
1177969Sgblack@eecs.umich.edu		f = b | (c,a);
1186570Sgblack@eecs.umich.edu		if ( f != e )
1194158Sgblack@eecs.umich.edu        {
1204158Sgblack@eecs.umich.edu			cout << __FILE__ << " " << __LINE__ << ": expected " << hex << e
1218232Snate@binkert.org			     << " actual " << f << dec << endl;
1224158Sgblack@eecs.umich.edu		}
1234158Sgblack@eecs.umich.edu
1245920Sgblack@eecs.umich.edu		e = b ^ 0x36;
1255789Sgblack@eecs.umich.edu		f = b ^ (c,a);
1268229Snate@binkert.org		if ( f != e )
1274158Sgblack@eecs.umich.edu        {
1284158Sgblack@eecs.umich.edu			cout << __FILE__ << " " << __LINE__ << ": expected " << hex << e
1294158Sgblack@eecs.umich.edu			     << " actual " << f << dec << endl;
1304158Sgblack@eecs.umich.edu		}
1314158Sgblack@eecs.umich.edu	}
132
133	cout << "Program completed" << endl;
134	return 0;
135}
136