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

  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.

 *****************************************************************************/
#define SC_INCLUDE_DYNAMIC_PROCESSES
#include "tlm.h"

#include "SimpleLTInitiator1_DMI.h"
#include "SimpleLTTarget1.h"
#include "SimpleLTInitiator2_DMI.h"
#include "SimpleLTTarget2.h"
#include "SimpleLTInitiator3_DMI.h"
#include "SimpleATInitiator1.h"
#include "SimpleATTarget1.h"
#include "SimpleATInitiator2.h"
#include "SimpleATTarget2.h"
#include "CoreDecouplingLTInitiator.h"
#include "ExplicitLTTarget.h"
#include "ExplicitATTarget.h"
#include "SimpleBusLT.h"

int sc_main(int argc, char* argv[])
{
  SimpleLTInitiator1_dmi initiator1("initiator1", 10, 0x00000000);
  SimpleLTTarget1 target1("target1");

  SimpleLTInitiator2_dmi initiator2("initiator2", 10, 0x10000000);
  SimpleLTTarget2 target2("target2");

  SimpleLTInitiator3_dmi initiator3("initiator3", 10, 0x20000000);
  SimpleLTTarget2 target3("target3");

  SimpleATInitiator1 initiator4("initiator4", 10, 0x30000000);
  SimpleATTarget1 target4("target4");

  SimpleATInitiator2 initiator5("initiator5", 10, 0x40000000);
  SimpleATTarget2 target5("target5");

  CoreDecouplingLTInitiator initiator6("initiator6", 10, 0x50000000);
  ExplicitLTTarget target6("target6");

  CoreDecouplingLTInitiator initiator7("initiator7", 10, 0x60000000);
  ExplicitATTarget target7("target7");

  SimpleBusLT<7, 7> bus("bus");

  initiator1.socket(bus.target_socket[0]);
  initiator2.socket(bus.target_socket[1]);
  initiator3.socket(bus.target_socket[2]);
  initiator4.socket(bus.target_socket[3]);
  initiator5.socket(bus.target_socket[4]);
  initiator6.socket(bus.target_socket[5]);
  initiator7.socket(bus.target_socket[6]);
  bus.initiator_socket[0](target1.socket);
  bus.initiator_socket[1](target2.socket);
  bus.initiator_socket[2](target3.socket);
  bus.initiator_socket[3](target4.socket);
  bus.initiator_socket[4](target5.socket);
  bus.initiator_socket[5](target6.socket);
  bus.initiator_socket[6](target7.socket);

  sc_core::sc_start();
  sc_core::sc_stop();

  return 0;
}
