/*****************************************************************************

  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
  more contributor license agreements.  See the NOTICE file distributed
  with this work for additional information regarding copyright ownership.
  Accellera licenses this file to you under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with the
  License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  implied.  See the License for the specific language governing
  permissions and limitations under the License.

 *****************************************************************************/

/*****************************************************************************

  T_2_4_1_1.cpp -- 

  Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15

 *****************************************************************************/

/*****************************************************************************

  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
  changes you are making here.

      Name, Affiliation, Date:
  Description of Modification:

 *****************************************************************************/

#include "systemc.h"

#define MYNAME T_2_4_1_1

const int WIDTH = 13;
typedef sc_lv<WIDTH>         my_vector;
typedef sc_signal<my_vector> signal_vector;

#include "T_2_4.h"

sc_signed
foobar1( const sc_signed& a,
         sc_signed const& b )
{
    return a + b;
}

sc_unsigned
foobar2( const sc_unsigned& a,
         sc_unsigned const& b )
{
    return a + b;
}

sc_bv_base
foobar3( const sc_bv_base& a,
         sc_bv_base const& b )
{
    return a.range(WIDTH - 1, 0) | b;
}

sc_lv_base
foobar4( const sc_lv_base& a,
         sc_lv_base const& b )
{
    return a & b.range(2*WIDTH - 1, WIDTH);
}

void
MYNAME::entry()
{
    my_vector a;
    my_vector b;
    sc_biguint<WIDTH> c, d;
    sc_biguint<WIDTH*2> e;

    a = x;
    b = y;
    c = a;
    c += d;
    z = a | b;
    wait();
    a = x.read() | y.read();
    b = x.read() ^ y.read();
    c = b;
    c = c - d;
    z = a & b;
    wait();
    a = x.read() & y.read();
    b = x.read() | y.read();
    z = a ^ b;
    c = a;
    c = c * d;
    wait();
    a = ~ x.read();
    b = ~ y.read();
    c = b;
    e = c * d;
    z = a | b;
    wait();
}

int sc_main(int argc, char* argv[] )
{
  return 0;
}
