test02.cpp revision 12855:588919e0e4aa
113606Sciro.santilli@arm.com/***************************************************************************** 27586SAli.Saidi@arm.com 37586SAli.Saidi@arm.com Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 47586SAli.Saidi@arm.com more contributor license agreements. See the NOTICE file distributed 57586SAli.Saidi@arm.com with this work for additional information regarding copyright ownership. 67586SAli.Saidi@arm.com Accellera licenses this file to you under the Apache License, Version 2.0 77586SAli.Saidi@arm.com (the "License"); you may not use this file except in compliance with the 87586SAli.Saidi@arm.com License. You may obtain a copy of the License at 97586SAli.Saidi@arm.com 107586SAli.Saidi@arm.com http://www.apache.org/licenses/LICENSE-2.0 117586SAli.Saidi@arm.com 127586SAli.Saidi@arm.com Unless required by applicable law or agreed to in writing, software 137905SBrad.Beckmann@amd.com distributed under the License is distributed on an "AS IS" BASIS, 145323Sgblack@eecs.umich.edu WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 152934Sktlim@umich.edu implied. See the License for the specific language governing 162934Sktlim@umich.edu permissions and limitations under the License. 172934Sktlim@umich.edu 182934Sktlim@umich.edu *****************************************************************************/ 192934Sktlim@umich.edu 202934Sktlim@umich.edu/***************************************************************************** 212934Sktlim@umich.edu 222934Sktlim@umich.edu test02.cpp 232934Sktlim@umich.edu 242934Sktlim@umich.edu Original Author: Andy Goodrich, Forte Design Systems, 7 Apr 2005 252934Sktlim@umich.edu 262934Sktlim@umich.edu *****************************************************************************/ 272934Sktlim@umich.edu 282934Sktlim@umich.edu/***************************************************************************** 292934Sktlim@umich.edu 302934Sktlim@umich.edu MODIFICATION LOG - modifiers, enter your name, affiliation, date and 312934Sktlim@umich.edu changes you are making here. 322934Sktlim@umich.edu 332934Sktlim@umich.edu Name, Affiliation, Date: 342934Sktlim@umich.edu Description of Modification: 352934Sktlim@umich.edu 362934Sktlim@umich.edu *****************************************************************************/ 372934Sktlim@umich.edu 382934Sktlim@umich.edu#include "systemc.h" 392934Sktlim@umich.edu 402934Sktlim@umich.edu#define GET_UNSIGNED(VALUE,OFFSET,EXPECTED) \ 412934Sktlim@umich.edu{ \ 4212564Sgabeblack@google.com right_sc_biguint32 = 1 << OFFSET; \ 4313774Sandreas.sandberg@arm.com VALUE.concat_get_data( right_sc_biguint32.get_raw(), OFFSET); \ 4412564Sgabeblack@google.com if ( right_sc_biguint32 != ((EXPECTED)<<OFFSET) ) \ 452934Sktlim@umich.edu cout << __FILE__ << "(" << __LINE__ << ") : " << \ 4610046Snilay@cs.wisc.edu #VALUE << ".concat_get_data(ulong*, " << #OFFSET << ") expected " \ 4713774Sandreas.sandberg@arm.com << ((EXPECTED)<<OFFSET) << " got " << right_sc_biguint32 << endl; \ 4813774Sandreas.sandberg@arm.com} 492934Sktlim@umich.edu 5010747SChris.Emmons@arm.com#define GET_UNSIGNEDS(OFFSET,EXPECTED) \ 5110747SChris.Emmons@arm.com{ \ 5210747SChris.Emmons@arm.com GET_UNSIGNED(left_sc_bigint12,OFFSET,EXPECTED); \ 5310747SChris.Emmons@arm.com GET_UNSIGNED(left_sc_biguint12,OFFSET,EXPECTED); \ 5410747SChris.Emmons@arm.com GET_UNSIGNED(left_sc_int12,OFFSET,EXPECTED); \ 5510747SChris.Emmons@arm.com GET_UNSIGNED(left_sc_uint12,OFFSET,EXPECTED); \ 5610747SChris.Emmons@arm.com GET_UNSIGNED(left_sc_int12[1],OFFSET,((EXPECTED>>1)&1)); \ 5710747SChris.Emmons@arm.com GET_UNSIGNED(left_sc_uint12[1],OFFSET,((EXPECTED>>1)&1)); \ 5810747SChris.Emmons@arm.com GET_UNSIGNED(left_sc_int12(7,2),OFFSET,((EXPECTED>>2)&0x3f)); \ 5912026Sweipingliao@google.com GET_UNSIGNED(left_sc_uint12(7,2),OFFSET,((EXPECTED>>2)&0x3f)); \ 6012026Sweipingliao@google.com} 6110747SChris.Emmons@arm.com 6210747SChris.Emmons@arm.com#define GET_UINT64(VALUE,EXPECTED) \ 632934Sktlim@umich.edu{ \ 642934Sktlim@umich.edu uint64 actual = VALUE.concat_get_uint64(); \ 652934Sktlim@umich.edu if ( actual != (EXPECTED) ) \ 662934Sktlim@umich.edu cout << __FILE__ << "(" << __LINE__ << ") : " << \ 672934Sktlim@umich.edu #VALUE << ".const_get_uint64() expected " << (EXPECTED) << " got " \ 682934Sktlim@umich.edu << actual << endl; \ 692934Sktlim@umich.edu} 7010720Sandreas.hansson@arm.com 716122SSteve.Reinhardt@amd.com#define GET_UINT64S(EXPECTED) \ 726122SSteve.Reinhardt@amd.com{ \ 736122SSteve.Reinhardt@amd.com GET_UINT64(left_sc_bigint12,EXPECTED) \ 7410594Sgabeblack@google.com GET_UINT64(left_sc_biguint12,EXPECTED) \ 7510594Sgabeblack@google.com GET_UINT64(left_sc_int12,EXPECTED) \ 7610697SCurtis.Dunham@arm.com GET_UINT64(left_sc_uint12,EXPECTED) \ 7710594Sgabeblack@google.com GET_UINT64(left_sc_int12[1], ((EXPECTED>>1)&1)) \ 7810594Sgabeblack@google.com GET_UINT64(left_sc_uint12[1], ((EXPECTED>>1)&1)) \ 7910594Sgabeblack@google.com GET_UINT64(left_sc_int12(7,2), ((EXPECTED>>2)&0x3f)) \ 8010594Sgabeblack@google.com GET_UINT64(left_sc_uint12(7,2),((EXPECTED>>2)&0x3f)) \ 8110594Sgabeblack@google.com} 8210118Snilay@cs.wisc.edu 834520Ssaidi@eecs.umich.edu#define LENGTH(LEFT,WIDTH) \ 844982Ssaidi@eecs.umich.edu{ \ 854520Ssaidi@eecs.umich.edu int width = LEFT.concat_length(0); \ 864520Ssaidi@eecs.umich.edu if ( width != (WIDTH) ) \ 872934Sktlim@umich.edu cout << __FILE__ << "(" << __LINE__ << ") : " \ 882934Sktlim@umich.edu << #LEFT << ".concat_length() expected " << (WIDTH) \ 893005Sstever@eecs.umich.edu << " got " << width << endl; \ 903005Sstever@eecs.umich.edu} 913304Sstever@eecs.umich.edu 922995Ssaidi@eecs.umich.edu#define LENGTHS(WIDTH) \ 9310118Snilay@cs.wisc.edu{ \ 9410118Snilay@cs.wisc.edu LENGTH(left_sc_bigint12,WIDTH) \ 9510118Snilay@cs.wisc.edu LENGTH(left_sc_biguint12,WIDTH) \ 9610118Snilay@cs.wisc.edu LENGTH(left_sc_int12,WIDTH) \ 9710720Sandreas.hansson@arm.com LENGTH(left_sc_uint12,WIDTH) \ 9810118Snilay@cs.wisc.edu} 9910118Snilay@cs.wisc.edu 10010118Snilay@cs.wisc.edu#define SET(LEFT,RIGHT,VALUE,OFFSET,EXPECTED) \ 10110118Snilay@cs.wisc.edu{ \ 10210118Snilay@cs.wisc.edu LEFT.concat_set(RIGHT,OFFSET); \ 10310118Snilay@cs.wisc.edu wait(); \ 10410118Snilay@cs.wisc.edu uint64 actual = LEFT.concat_get_uint64(); \ 10510118Snilay@cs.wisc.edu if ( actual != (EXPECTED) ) \ 10610118Snilay@cs.wisc.edu cout << #LEFT << ".const_set_uint64(" << #RIGHT <<", " << VALUE << ") \ 10710118Snilay@cs.wisc.edu << expected " << (EXPECTED) << " got " << actual << endl; \ 10810118Snilay@cs.wisc.edu} 10910118Snilay@cs.wisc.edu 11010118Snilay@cs.wisc.edu#define SET_SIGNED(VALUE,OFFSET,EXPECTED) \ 11110118Snilay@cs.wisc.edu{ \ 11210118Snilay@cs.wisc.edu right_sc_bigint32 = VALUE; \ 11310118Snilay@cs.wisc.edu SET(left_sc_bigint12,right_sc_bigint32,VALUE,OFFSET,EXPECTED); \ 11410118Snilay@cs.wisc.edu SET(left_sc_biguint12,right_sc_bigint32,VALUE,OFFSET,EXPECTED); \ 1158713Sandreas.hansson@arm.com SET(left_sc_int12,right_sc_bigint32,VALUE,OFFSET,EXPECTED); \ 11610118Snilay@cs.wisc.edu SET(left_sc_uint12,right_sc_bigint32,VALUE,OFFSET,EXPECTED); \ 11710118Snilay@cs.wisc.edu} 11810118Snilay@cs.wisc.edu 11910118Snilay@cs.wisc.edu#define SET_S64(VALUE,OFFSET,EXPECTED) \ 12010118Snilay@cs.wisc.edu{ \ 12110118Snilay@cs.wisc.edu right_s64 = VALUE; \ 12210118Snilay@cs.wisc.edu SET(left_sc_bigint12,right_s64,VALUE,OFFSET,EXPECTED); \ 12310118Snilay@cs.wisc.edu SET(left_sc_biguint12,right_s64,VALUE,OFFSET,EXPECTED); \ 1249826Sandreas.hansson@arm.com SET(left_sc_int12,right_s64,VALUE,OFFSET,EXPECTED); \ 1252934Sktlim@umich.edu SET(left_sc_uint12,right_s64,VALUE,OFFSET,EXPECTED); \ 1262934Sktlim@umich.edu} 1272995Ssaidi@eecs.umich.edu 1282934Sktlim@umich.edu#define SET_UNSIGNED(VALUE,OFFSET,EXPECTED) \ 1296765SBrad.Beckmann@amd.com{ \ 1306765SBrad.Beckmann@amd.com right_sc_biguint32 = VALUE; \ 1316765SBrad.Beckmann@amd.com SET(left_sc_bigint12,right_sc_biguint32,VALUE,OFFSET,EXPECTED); \ 1326765SBrad.Beckmann@amd.com SET(left_sc_biguint12,right_sc_biguint32,VALUE,OFFSET,EXPECTED); \ 1336765SBrad.Beckmann@amd.com SET(left_sc_int12,right_sc_biguint32,VALUE,OFFSET,EXPECTED); \ 1346765SBrad.Beckmann@amd.com SET(left_sc_uint12,right_sc_biguint32,VALUE,OFFSET,EXPECTED); \ 1356765SBrad.Beckmann@amd.com} 13610594Sgabeblack@google.com 13710594Sgabeblack@google.com#define SET_U64(VALUE,OFFSET,EXPECTED) \ 13810594Sgabeblack@google.com{ \ 1396765SBrad.Beckmann@amd.com right_u64 = VALUE; \ 1406765SBrad.Beckmann@amd.com SET(left_sc_bigint12,right_u64,VALUE,OFFSET,EXPECTED); \ 1416765SBrad.Beckmann@amd.com SET(left_sc_biguint12,right_u64,VALUE,OFFSET,EXPECTED); \ 14211182Spalle@lyckegaard.dk SET(left_sc_int12,right_u64,VALUE,OFFSET,EXPECTED); \ 1438713Sandreas.hansson@arm.com SET(left_sc_uint12,right_u64,VALUE,OFFSET,EXPECTED); \ 1448713Sandreas.hansson@arm.com} 1458713Sandreas.hansson@arm.com 1468713Sandreas.hansson@arm.com#define SETS(VALUE,OFFSET,EXPECTED) \ 1474486Sbinkertn@umich.edu SET_S64(VALUE,OFFSET,EXPECTED) \ 1484486Sbinkertn@umich.edu SET_SIGNED(VALUE,OFFSET,EXPECTED) \ 1494486Sbinkertn@umich.edu SET_UNSIGNED(VALUE,OFFSET,EXPECTED) \ 1504486Sbinkertn@umich.edu SET_U64(VALUE,OFFSET,EXPECTED) 1514486Sbinkertn@umich.edu 1524486Sbinkertn@umich.eduSC_MODULE(X) 1534486Sbinkertn@umich.edu{ 1543584Ssaidi@eecs.umich.edu SC_CTOR(X) 1553584Ssaidi@eecs.umich.edu { 1563584Ssaidi@eecs.umich.edu SC_CTHREAD(sync, clk.pos()); 1573584Ssaidi@eecs.umich.edu } 1583584Ssaidi@eecs.umich.edu void sync() 15910720Sandreas.hansson@arm.com { 1609036Sandreas.hansson@arm.com // for (;; ) 1619164Sandreas.hansson@arm.com { 1623743Sgblack@eecs.umich.edu LENGTHS(12); 1634104Ssaidi@eecs.umich.edu SETS(0x87654321,0,0x321); 1643743Sgblack@eecs.umich.edu SETS(0x87654321,4,0x432); 1659826Sandreas.hansson@arm.com GET_UINT64S(0x432); 1669826Sandreas.hansson@arm.com GET_UNSIGNEDS(0,0x432); 1678839Sandreas.hansson@arm.com GET_UNSIGNEDS(4,0x432); 1688839Sandreas.hansson@arm.com } 1698839Sandreas.hansson@arm.com } 1708839Sandreas.hansson@arm.com 1718839Sandreas.hansson@arm.com sc_in_clk clk; 1728839Sandreas.hansson@arm.com sc_int<12> left_sc_int12; 1733584Ssaidi@eecs.umich.edu sc_bigint<12> left_sc_bigint12; 1743898Ssaidi@eecs.umich.edu sc_biguint<12> left_sc_biguint12; 17511563Sjakub@jermar.eu sc_uint<12> left_sc_uint12; 1768839Sandreas.hansson@arm.com 1778713Sandreas.hansson@arm.com sc_int<32> right_sc_int32; 1788713Sandreas.hansson@arm.com sc_bigint<32> right_sc_bigint32; 1798713Sandreas.hansson@arm.com sc_biguint<32> right_sc_biguint32; 1808713Sandreas.hansson@arm.com sc_uint<32> right_sc_uint32; 1818713Sandreas.hansson@arm.com int right_si; 1828713Sandreas.hansson@arm.com long right_sl; 1838713Sandreas.hansson@arm.com int64 right_s64; 1848713Sandreas.hansson@arm.com unsigned int right_ui; 1858713Sandreas.hansson@arm.com unsigned long right_ul; 1868713Sandreas.hansson@arm.com uint64 right_u64; 1878713Sandreas.hansson@arm.com}; 1888713Sandreas.hansson@arm.com 1898713Sandreas.hansson@arm.comint sc_main( int argc, char* argv[] ) 1908713Sandreas.hansson@arm.com{ 1918713Sandreas.hansson@arm.com sc_clock clock; 1928713Sandreas.hansson@arm.com X x("x"); 1938713Sandreas.hansson@arm.com x.clk(clock); 1948713Sandreas.hansson@arm.com sc_start(1000, SC_NS); 1958713Sandreas.hansson@arm.com 1964103Ssaidi@eecs.umich.edu cerr << "Program completed\n"; 1974103Ssaidi@eecs.umich.edu return 0; 1984103Ssaidi@eecs.umich.edu} 1993745Sgblack@eecs.umich.edu