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 test01.cpp -- 2312855Sgabeblack@google.com 2412855Sgabeblack@google.com Original Author: Joe Buck, 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#include "systemc.h" 3912855Sgabeblack@google.com 4012855Sgabeblack@google.comvoid cover_sc_bit() 4112855Sgabeblack@google.com{ 4212855Sgabeblack@google.com sc_bit bdef; 4312855Sgabeblack@google.com sc_bit bf(false); 4412855Sgabeblack@google.com sc_bit bt(true); 4512855Sgabeblack@google.com sc_bit b0(0); 4612855Sgabeblack@google.com sc_bit b1(1); 4712855Sgabeblack@google.com try { 4812855Sgabeblack@google.com sc_bit foo(2); 4912855Sgabeblack@google.com } 5012855Sgabeblack@google.com catch (sc_report) { 5112855Sgabeblack@google.com cout << "Caught exception for sc_bit(2)\n"; 5212855Sgabeblack@google.com } 5312855Sgabeblack@google.com sc_bit bc0('0'); 5412855Sgabeblack@google.com sc_bit bc1('1'); 5512855Sgabeblack@google.com try { 5612855Sgabeblack@google.com sc_bit foo('2'); 5712855Sgabeblack@google.com } 5812855Sgabeblack@google.com catch (sc_report) { 5912855Sgabeblack@google.com cout << "Caught exception for sc_bit('2')\n"; 6012855Sgabeblack@google.com } 6112855Sgabeblack@google.com sc_bit blc0(sc_logic('0')); 6212855Sgabeblack@google.com sc_bit blc1(sc_logic('1')); 6312855Sgabeblack@google.com sc_bit blcx(sc_logic('X')); 6412855Sgabeblack@google.com sc_bit bcop(bt); 6512855Sgabeblack@google.com cout << bdef << bf << bt << b0 << b1 << bc0 << bc1 << blc0 << blc1 6612855Sgabeblack@google.com << blcx << bcop << endl; 6712855Sgabeblack@google.com sc_bit b; 6812855Sgabeblack@google.com b = bt; 6912855Sgabeblack@google.com sc_assert(b); 7012855Sgabeblack@google.com b = 0; 7112855Sgabeblack@google.com sc_assert(!b); 7212855Sgabeblack@google.com b = true; 7312855Sgabeblack@google.com sc_assert(b.to_bool()); 7412855Sgabeblack@google.com b = '0'; 7512855Sgabeblack@google.com sc_assert(!b.to_bool()); 7612855Sgabeblack@google.com b = sc_logic('1'); 7712855Sgabeblack@google.com sc_assert(b.to_char() == '1'); 7812855Sgabeblack@google.com b = bf; 7912855Sgabeblack@google.com sc_assert(~b); 8012855Sgabeblack@google.com b |= bt; 8112855Sgabeblack@google.com sc_assert(b); 8212855Sgabeblack@google.com b &= bf; 8312855Sgabeblack@google.com sc_assert(!b); 8412855Sgabeblack@google.com b |= 1; 8512855Sgabeblack@google.com sc_assert(b); 8612855Sgabeblack@google.com b &= 0; 8712855Sgabeblack@google.com sc_assert(!b); 8812855Sgabeblack@google.com b |= '1'; 8912855Sgabeblack@google.com sc_assert(b); 9012855Sgabeblack@google.com b &= '0'; 9112855Sgabeblack@google.com sc_assert(!b); 9212855Sgabeblack@google.com b |= true; 9312855Sgabeblack@google.com sc_assert(b); 9412855Sgabeblack@google.com b &= false; 9512855Sgabeblack@google.com sc_assert(!b); 9612855Sgabeblack@google.com b ^= bt; 9712855Sgabeblack@google.com sc_assert(b); 9812855Sgabeblack@google.com b ^= 1; 9912855Sgabeblack@google.com sc_assert(!b); 10012855Sgabeblack@google.com b ^= '1'; 10112855Sgabeblack@google.com sc_assert(b); 10212855Sgabeblack@google.com b ^= true; 10312855Sgabeblack@google.com sc_assert(!b); 10412855Sgabeblack@google.com 10512855Sgabeblack@google.com sc_assert(b == bf); 10612855Sgabeblack@google.com sc_assert(b == 0); 10712855Sgabeblack@google.com sc_assert(b == '0'); 10812855Sgabeblack@google.com sc_assert(b == false); 10912855Sgabeblack@google.com b = 1; 11012855Sgabeblack@google.com sc_assert(b == bt); 11112855Sgabeblack@google.com sc_assert(b == 1); 11212855Sgabeblack@google.com sc_assert(b == '1'); 11312855Sgabeblack@google.com sc_assert(b == true); 11412855Sgabeblack@google.com sc_assert(1 == b); 11512855Sgabeblack@google.com sc_assert('1' == b); 11612855Sgabeblack@google.com sc_assert(true == b); 11712855Sgabeblack@google.com sc_assert(equal(b, bt)); 11812855Sgabeblack@google.com sc_assert(equal(b, 1)); 11912855Sgabeblack@google.com sc_assert(equal(b, '1')); 12012855Sgabeblack@google.com sc_assert(equal(b, true)); 12112855Sgabeblack@google.com sc_assert(equal(1, b)); 12212855Sgabeblack@google.com sc_assert(equal('1', b)); 12312855Sgabeblack@google.com sc_assert(equal(true, b)); 12412855Sgabeblack@google.com b = 0; 12512855Sgabeblack@google.com sc_assert(b != bt); 12612855Sgabeblack@google.com sc_assert(b != 1); 12712855Sgabeblack@google.com sc_assert(b != '1'); 12812855Sgabeblack@google.com sc_assert(b != true); 12912855Sgabeblack@google.com sc_assert(1 != b); 13012855Sgabeblack@google.com sc_assert('1' != b); 13112855Sgabeblack@google.com sc_assert(true != b); 13212855Sgabeblack@google.com sc_assert(not_equal(b, bt)); 13312855Sgabeblack@google.com sc_assert(not_equal(b, 1)); 13412855Sgabeblack@google.com sc_assert(not_equal(b, '1')); 13512855Sgabeblack@google.com sc_assert(not_equal(b, true)); 13612855Sgabeblack@google.com sc_assert(not_equal(1, b)); 13712855Sgabeblack@google.com sc_assert(not_equal('1', b)); 13812855Sgabeblack@google.com sc_assert(not_equal(true, b)); 13912855Sgabeblack@google.com 14012855Sgabeblack@google.com // the following assertion is incorrect, because the b_not() method 14112855Sgabeblack@google.com // is destructive, i.e., it implements something like b ~= void. 14212855Sgabeblack@google.com /// sc_assert(b == b_not(b.b_not())); 14312855Sgabeblack@google.com b.b_not(); 14412855Sgabeblack@google.com sc_assert(b); 14512855Sgabeblack@google.com sc_bit bx; 14612855Sgabeblack@google.com b_not(bx, b0); 14712855Sgabeblack@google.com sc_assert(bx); 14812855Sgabeblack@google.com b_not(bx, b1); 14912855Sgabeblack@google.com sc_assert(!bx); 15012855Sgabeblack@google.com 15112855Sgabeblack@google.com cout << (b0|b0) << (b0|b1) << (b1|b0) << (b1|b1) << endl; 15212855Sgabeblack@google.com cout << (b0&b0) << (b0&b1) << (b1&b0) << (b1&b1) << endl; 15312855Sgabeblack@google.com cout << (b0^b0) << (b0^b1) << (b1^b0) << (b1^b1) << endl; 15412855Sgabeblack@google.com 15512855Sgabeblack@google.com cout << (b0|0) << (b0|1) << (b1|0) << (b1|1) << endl; 15612855Sgabeblack@google.com cout << (b0&0) << (b0&1) << (b1&0) << (b1&1) << endl; 15712855Sgabeblack@google.com cout << (b0^0) << (b0^1) << (b1^0) << (b1^1) << endl; 15812855Sgabeblack@google.com 15912855Sgabeblack@google.com cout << (b0|'0') << (b0|'1') << (b1|'0') << (b1|'1') << endl; 16012855Sgabeblack@google.com cout << (b0&'0') << (b0&'1') << (b1&'0') << (b1&'1') << endl; 16112855Sgabeblack@google.com cout << (b0^'0') << (b0^'1') << (b1^'0') << (b1^'1') << endl; 16212855Sgabeblack@google.com 16312855Sgabeblack@google.com cout << (b0|true) << (b0|false) << (b1|true) << (b1|false) << endl; 16412855Sgabeblack@google.com cout << (b0&true) << (b0&false) << (b1&true) << (b1&false) << endl; 16512855Sgabeblack@google.com cout << (b0^true) << (b0^false) << (b1^true) << (b1^false) << endl; 16612855Sgabeblack@google.com 16712855Sgabeblack@google.com cout << (0|b0) << (0|b1) << (1|b0) << (1|b1) << endl; 16812855Sgabeblack@google.com cout << (0&b0) << (0&b1) << (1&b0) << (1&b1) << endl; 16912855Sgabeblack@google.com cout << (0^b0) << (0^b1) << (1^b0) << (1^b1) << endl; 17012855Sgabeblack@google.com 17112855Sgabeblack@google.com cout << ('0'|b0) << ('0'|b1) << ('1'|b0) << ('1'|b1) << endl; 17212855Sgabeblack@google.com cout << ('0'&b0) << ('0'&b1) << ('1'&b0) << ('1'&b1) << endl; 17312855Sgabeblack@google.com cout << ('0'^b0) << ('0'^b1) << ('1'^b0) << ('1'^b1) << endl; 17412855Sgabeblack@google.com 17512855Sgabeblack@google.com cout << (false|b0) << (false|b1) << (true|b0) << (true|b1) << endl; 17612855Sgabeblack@google.com cout << (false&b0) << (false&b1) << (true&b0) << (true&b1) << endl; 17712855Sgabeblack@google.com cout << (false^b0) << (false^b1) << (true^b0) << (true^b1) << endl; 17812855Sgabeblack@google.com 17912855Sgabeblack@google.com cout << b_or(b0,b0) << b_or(b0,b1) << b_or(b1,b0) << b_or(b1,b1) << endl; 18012855Sgabeblack@google.com cout << b_and(b0,b0) << b_and(b0,b1) << b_and(b1,b0) << b_and(b1,b1) 18112855Sgabeblack@google.com << endl; 18212855Sgabeblack@google.com cout << b_xor(b0,b0) << b_xor(b0,b1) << b_xor(b1,b0) << b_xor(b1,b1) 18312855Sgabeblack@google.com << endl; 18412855Sgabeblack@google.com 18512855Sgabeblack@google.com cout << b_or(b0,0) << b_or(b0,1) << b_or(b1,0) << b_or(b1,1) << endl; 18612855Sgabeblack@google.com cout << b_and(b0,0) << b_and(b0,1) << b_and(b1,0) << b_and(b1,1) << endl; 18712855Sgabeblack@google.com cout << b_xor(b0,0) << b_xor(b0,1) << b_xor(b1,0) << b_xor(b1,1) << endl; 18812855Sgabeblack@google.com 18912855Sgabeblack@google.com cout << b_or(b0,'0') << b_or(b0,'1') << b_or(b1,'0') << b_or(b1,'1') 19012855Sgabeblack@google.com << endl; 19112855Sgabeblack@google.com cout << b_and(b0,'0') << b_and(b0,'1') << b_and(b1,'0') << b_and(b1,'1') 19212855Sgabeblack@google.com << endl; 19312855Sgabeblack@google.com cout << b_xor(b0,'0') << b_xor(b0,'1') << b_xor(b1,'0') << b_xor(b1,'1') 19412855Sgabeblack@google.com << endl; 19512855Sgabeblack@google.com 19612855Sgabeblack@google.com cout << b_or(b0,false) << b_or(b0,true) << b_or(b1,false) << b_or(b1,true) 19712855Sgabeblack@google.com << endl; 19812855Sgabeblack@google.com cout << b_and(b0,false) << b_and(b0,true) << b_and(b1,false) 19912855Sgabeblack@google.com << b_and(b1,true) << endl; 20012855Sgabeblack@google.com cout << b_xor(b0,false) << b_xor(b0,true) << b_xor(b1,false) 20112855Sgabeblack@google.com << b_xor(b1,true) << endl; 20212855Sgabeblack@google.com 20312855Sgabeblack@google.com cout << b_or(0,b0) << b_or(0,b1) << b_or(1,b0) << b_or(1,b1) << endl; 20412855Sgabeblack@google.com cout << b_and(0,b0) << b_and(0,b1) << b_and(1,b0) << b_and(1,b1) << endl; 20512855Sgabeblack@google.com cout << b_xor(0,b0) << b_xor(0,b1) << b_xor(1,b0) << b_xor(1,b1) << endl; 20612855Sgabeblack@google.com 20712855Sgabeblack@google.com cout << b_or('0',b0) << b_or('0',b1) << b_or('1',b0) << b_or('1',b1) 20812855Sgabeblack@google.com << endl; 20912855Sgabeblack@google.com cout << b_and('0',b0) << b_and('0',b1) << b_and('1',b0) << b_and('1',b1) 21012855Sgabeblack@google.com << endl; 21112855Sgabeblack@google.com cout << b_xor('0',b0) << b_xor('0',b1) << b_xor('1',b0) << b_xor('1',b1) 21212855Sgabeblack@google.com << endl; 21312855Sgabeblack@google.com 21412855Sgabeblack@google.com cout << b_or(false,b0) << b_or(false,b1) << b_or(true,b0) << b_or(true,b1) 21512855Sgabeblack@google.com << endl; 21612855Sgabeblack@google.com cout << b_and(false,b0) << b_and(false,b1) << b_and(true,b0) 21712855Sgabeblack@google.com << b_and(true,b1) << endl; 21812855Sgabeblack@google.com cout << b_xor(false,b0) << b_xor(false,b1) << b_xor(true,b0) 21912855Sgabeblack@google.com << b_xor(true,b1) << endl; 22012855Sgabeblack@google.com 22112855Sgabeblack@google.com b_or(b, b0, b1); 22212855Sgabeblack@google.com sc_assert(b); 22312855Sgabeblack@google.com b_and(b, b0, b1); 22412855Sgabeblack@google.com sc_assert(!b); 22512855Sgabeblack@google.com b_xor(b, b0, b1); 22612855Sgabeblack@google.com sc_assert(b); 22712855Sgabeblack@google.com} 22812855Sgabeblack@google.com 22912855Sgabeblack@google.comint 23012855Sgabeblack@google.comsc_main(int, char*[]) 23112855Sgabeblack@google.com{ 23212855Sgabeblack@google.com cover_sc_bit(); 23312855Sgabeblack@google.com return 0; 23412855Sgabeblack@google.com} 23512855Sgabeblack@google.com 236