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