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